Scilab-要因探索から三目並べまで

こんばんは、今日は金曜日です。伝統的に、私の発見を皆さんと共有したいと思います。

面白い状況。 私が個人的に知っている少数のプログラマー(プログラミングに関連する人々)はゲームを書いたことはなく、ヒューマニズムの原則からホッキョクグマとあまり似ていない人は、「プロのプログラマー」の概念からホッキョクグマにすぎません。工芸品。

上記の人々の一人は私です。

この記事では、1石で2羽の鳥を殺して、応用数学プログラムのScilabパッケージについて少し説明し、同時にその機能を非標準的な方法で示したいと思います。

今日は、Scilabで三目並べを作る方法についてお話します。 詳細については、猫の下で歓迎されています。



画像



DrZugrikの写真をありがとう





そもそも、私はプログラマーではなく、プログラマーでもありません。非常に非常にプログラマーでもありません。

そのため、この記事を行動の指針として受け入れないことを提案します。 この投稿は「楽しみのためだけ」に書かれており、Scilabを普及させるために部分的に書いています。

ソーススクリプトファイルはGitHubにアップロードされるため、誰かがコードの改善を希望する場合は、私だけが使用します。



まず、クイックリファレンスです。 Scilabとは何ですか?

この質問に対する詳細な回答は、 ウィキペディアまたはコミュニティの公式ウェブサイトで見つけることができます

あなたが自分の言葉で言うなら、それからScilab、それはMatlabの発見類似物です。 非常に類似した構文で、類似の手順(多くのMatlabの手順はScilabに独自の対応物があります)、最新のScilab 5.4.1のインターフェースは、5年前にMatlabにリモートに似ていますが、今では非常に快適に作業できます。 もっとも重要なことは、Scilabには同様の機能があり、商業的な巨人よりも確かに少ないが、それでも学生、初心者の科学者、または好奇心engineer盛なエンジニアにとっては、それで十分です。 ScilabにはSimulinkの独自のアナログがあります(明らかに劣っていますが)。たとえば、シンボリック計算用のMaxima(非常に確実に動作しませんでしたが動作しました)など、さまざまなモジュールを接続することもできます。 大学に設置されているMatlabの海賊版を置き換えてみませんか?

適用された数学プログラムのパッケージの動作の例は、ネタバレの下のスクリーンショットで見ることができます。



インターフェース、グラフ、階乗
画像

scilabのグラフィックス



画像

関数の例-階乗を見つける





確かにScilabをマスターするには、おそらくもう少し難しいでしょう。 デバッグは少なく、バグがあり、それを扱う方法は確かにビッグブラザーのものよりも少ないですが、潜在的な質問に対する答えはインターネットやプログラムのマニュアルで時々見つかることがあります。

ところで、私たちは今手元にいて、ガイドを買いだめしています。 三目並べを書くには、SCILAB Package Guideが必要でし

Scilab環境でグラフィカルアプリケーションを作成し、



まあ、 Scilab工学や数学の問題の解決を妨げません



タスクは何でしたか。

Scilabでグラフィカルインターフェイスを作成する機能を使用して、コンピューターで遊ぶための簡単な三目並べを作成します。



ソースコード( GitHubに投稿)は、ネタバレの下に表示されます



簡単に説明すると、最初にグラフィックウィンドウが作成されます。このウィンドウには、競技場の9つのボタン、テキストラベル、および再起動ボタンが含まれています。 競技場のボタンをクリックすると、ゲームが始まります。 純粋に天井からの人工知能は1から9の値を取り、自由に「行きます」場合はさらに掘り下げます。 各クリックハンドラーの最後に、勝利条件が満たされていることの検証が呼び出されます(フィールドセルをマトリックスとして表し、あらゆる点でそれをあざ笑います)。



次のようになります。



ソースコード
// Tick-tack-toe //Tic Tac Toe, on the basis of scilab //Start here global ffield; global Win; ffield=0; //the creation of the game window mw=figure(); set(mw,'position',[20,40,500,450]); set(mw,'figure_name','Tick-tack-toe'); //status Bar label1=uicontrol('Style', 'text', 'Position', [80,400,250,20], 'String',.. 'Game in progress (click on the square button)','HorizontalAlignment','left'); //the creation of the restart button ubutton_c=uicontrol(mw,'Style','pushbutton','position',[80,380,120,20].. ,'String','Restart game','CallBack','newgame()'); //the creation of the playing field ubutton=list([1:9]); for i=1:9 num=string(i) y=ceil(i/3); x=i-((y-1)*3); ubutton(i)=uicontrol(mw,'Style','pushbutton','position',[80*x+2,80*y,80,80].. ,'String',' ','CallBack','press_button('+num+')'); end function y=press_button(button_num) //gaming activities global ffield; global Win; // Human Button_Value=get(ubutton(button_num),'String'); if Button_Value==" " then set(ubutton(button_num),'String',"X"); ffield=ffield+1; end // AI if ffield<9 then ct=comp_turn(); //get random action of AI buf=get(ubutton(ct),'String'); while buf ~= " " do ct=comp_turn(); //get random action of AI buf=get(ubutton(ct),'String'); end set(ubutton(ct),'String',"0"); // Ai chooses cell end ffield=ffield+1; //counter filled cells Winner() //find game winner endfunction function R=comp_turn() // Computer opponent action (random action) R = grand(1,1,"poi",4); if R>9 then R=9; end; if R<1 then R=1; end; endfunction function Winner() //find game winner function res=0; pw=0; cw=0; plfield=hypermat([3,3]); // results matrix for human cmfield=hypermat([3,3]); // results matrix for AI // check game field for ck=1:9 Button_Value=get(ubutton(ck),'String'); j=ceil(ck/3); i=ck-((j-1)*3); if Button_Value=="X" then plfield(j,i)=1; end if Button_Value=="0" then cmfield(j,i)=1; end end // check human results pb=pob_diag(plfield,3) ;//processing second diag. sm=prod(plfield,1)+prod(plfield,2)';//processing matrix if sum(sm)==1 then res=1; end; //check winning the hor. and vert. field if diag(plfield,0)==1 then res=1; end; //check winning field main diag. if pb==1 then res=1; end; //check winning field second diag. // check AI results pb=pob_diag(cmfield,3) //processing second diag. sm=prod(cmfield,1)+prod(cmfield,2)';//processing matrix if sum(sm)==1 then res=2; end; // check winning the hor. and vert. field if diag(cmfield,0)==1 then res=2; end; //check winning field main diag. if pb==1 then res=2; end; //check winning field second diag. // Deciding the winner if res==1 then set(label1,'String',"You Win"); end if res==2 then set(label1,'String',"Computer Win"); end if (ffield>=9) & (res==0) then set(label1,'String',"No Winner"); end endfunction function mult=pob_diag(A,N) // analysis of the secondary diagonal matrix mult=1; for i=1:N mult=mult*A(i,N+1-i); end endfunction function mult=find_one(Win) // analysis of the columns of the matrix mult=1; prod(Win,1)+prod(Win,2)' for i=1:2 mult=mult+i; end endfunction function newgame() // restart game (reset values) global ffield; global Win; global res; for i=1:9 y=ceil(i/3); x=i-((y-1)*3); set(ubutton(i),'String',' '); end; ffield=0; res=0 Win=0; set(label1, 'String','Game in progress (click on the square button)'); endfunction
      
      









画像



もちろん、コードは悪いですが、この確かに便利な数学ツールを研究するように誰かを動機づけることができることを願っています。

素敵な金曜日と素晴らしい週末をお過ごしください:)



All Articles