使用Processing实现井字棋
一、 Processing簡介
Processing 在 2001 年誕生于麻省理工學(xué)院(MIT)的媒體實驗室,主創(chuàng)者為 Ben Fry 和 Casey Reas,項目發(fā)起的初衷,本是為了滿足他們自身的教學(xué)和學(xué)習(xí)需要。后來,當(dāng)Casey在意大利的伊夫雷亞交互設(shè)計學(xué)院(Interaction Design Institute Ivrea)進(jìn)行教學(xué)的時候,基于Processing,衍生出了Wiring和Arduino項目。隨著時間的推移,又誕生了多個語言的版本,比如基于JavaScript的Processing.js,還有基于Python、Ruby、ActionScript以及Scala等版本。而當(dāng)前的Processing,成立了相應(yīng)的基金會,由基金會負(fù)責(zé)軟件的開發(fā)和維護(hù)工作。
二、井字棋功能實現(xiàn)
井字棋邏輯十分簡單,就是橫、豎、斜三個方向湊齊三個棋子就獲得勝利。
1、繪制棋盤
2、實現(xiàn)鼠標(biāo)點(diǎn)擊繪制棋子
3、根據(jù)flag值,判斷游戲勝負(fù)
4、展示每局游戲情況。
由于邏輯十分簡單,所以直接上代碼。
int maps[][] = new int[][]{{0,0,0},{0,0,0},{0,0,0}};//井字棋 int ClickedNum=0;//有效點(diǎn)擊次數(shù) int flag=0;//狀態(tài) int red=0;//紅方獲勝局?jǐn)?shù) int green=0;//綠方獲勝局?jǐn)?shù) int tie;//平局局?jǐn)?shù) int mark=0; PFont font; void setup() {size(800,800);background(255,255,255);//smooth(8);surface.setResizable(true);//手動調(diào)節(jié)窗口大小pixelDensity(displayDensity());//高分辨率時自動調(diào)節(jié)font = createFont("黑體",12); }void init()//初始化 {if(flag == 1)//flag=1,紅方勝利;flag=2,綠方勝利;flag=3,平局red++;else if(flag == 2) green++;else if(flag == 3)tie++;flag=0;mark++;if(mark%2==1)ClickedNum=1;elseClickedNum=0;for(int i=0;i<3;i++)for(int j=0;j<3;j++)maps[i][j]=0; }void draw() {background(255,255,255);DrawLine();DrawChess();GameResult(); }void DrawLine() {if(mark % 2 == 0){fill(255,0,0);textFont(font,20);textAlign(CENTER);text("紅方先",740,80);noFill();}else{fill(0,255,0);textFont(font,20);textAlign(CENTER);text("綠方先",740,80);noFill();}stroke(0,0,0);strokeWeight(5);line(150,200,600,200);//劃四根井字棋的線條line(150,350,600,350);line(300,50,300,500);line(450,50,450,500);fill(255,0,0);textFont(font,20);textAlign(CENTER);text("紅方:"+red,740,20);noFill();fill(0,255,0);textFont(font,20);textAlign(CENTER);text("綠方:"+green,740,40);noFill();fill(0,0,0);textFont(font,20);textAlign(CENTER);text("平局:"+tie,740,60);noFill();if(flag > 0){stroke(255,255,255);fill(255,0,0);rect(330,560,100,30);noFill();fill(255,255,255);textFont(font,20);textAlign(CENTER);text("繼續(xù)游戲",380,582);noFill();} }void mouseClicked() {if(flag<=0){int x=(mouseX-150)/150;int y=(mouseY-50)/150;if(x<3 && y<3){if(ClickedNum%2 == 0 && maps[x][y] == 0){ClickedNum++;maps[x][y]=1;}else if(ClickedNum%2 == 1 && maps[x][y] == 0){ClickedNum++;maps[x][y]=2;} }}else if(flag>0){if(mouseX>= 330 && mouseX <= 430 && mouseY >= 560 && mouseY <= 590)init();} }void DrawChess() {for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(maps[i][j]==1){//紅畫圈圈 stroke(255,0,0);ellipse(225+150*i,125+150*j,100,100);noFill();}else if(maps[i][j]==2){//畫綠方塊stroke(0,255,0);rect(175+150*i,75+150*j,100,100);noFill();}}} }void GameResult()//判斷游戲結(jié)果 flag=1,紅方勝利,flag=2,綠方勝利,flag=3,平局 {flag=JudgeResult();if(flag==-1 && ((ClickedNum > 9 && (mark%2 == 1)) || (ClickedNum == 9 && mark%2 == 0))){flag=3;fill(0,0,0);textFont(font,20);textAlign(CENTER);text("游戲結(jié)束,平局!",380,550);noFill();}else if(flag == 1){fill(255,0,0);textFont(font,20);textAlign(CENTER);text("游戲結(jié)束,紅方勝利!",380,550);noFill();}else if(flag == 2){fill(0,255,0);textFont(font,20);textAlign(CENTER);text("游戲結(jié)束,綠方勝利!",380,550);noFill();} }int JudgeResult() {for(int i=0;i<3;i++)//橫{if(maps[i][0] == maps[i][1] && maps[i][1] == maps[i][2])return maps[i][0];}for(int j=0;j<3;j++)//列{if(maps[0][j] == maps[1][j] && maps[1][j] == maps[2][j])return maps[0][j];}if(maps[0][0] == maps[1][1] && maps[1][1] == maps[2][2])return maps[0][0];if(maps[0][2] == maps[1][1] && maps[1][1] == maps[2][0])return maps[0][2];return -1; }三、實現(xiàn)效果
歡迎發(fā)表意見!!!
總結(jié)
以上是生活随笔為你收集整理的使用Processing实现井字棋的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cisco AnyConnect 报错
- 下一篇: 浅谈:刷机必备神器,不断更新