使用Processing实现井字棋
生活随笔
收集整理的這篇文章主要介紹了
使用Processing实现井字棋
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、 Processing簡介
Processing 在 2001 年誕生于麻省理工學院(MIT)的媒體實驗室,主創者為 Ben Fry 和 Casey Reas,項目發起的初衷,本是為了滿足他們自身的教學和學習需要。后來,當Casey在意大利的伊夫雷亞交互設計學院(Interaction Design Institute Ivrea)進行教學的時候,基于Processing,衍生出了Wiring和Arduino項目。隨著時間的推移,又誕生了多個語言的版本,比如基于JavaScript的Processing.js,還有基于Python、Ruby、ActionScript以及Scala等版本。而當前的Processing,成立了相應的基金會,由基金會負責軟件的開發和維護工作。
二、井字棋功能實現
井字棋邏輯十分簡單,就是橫、豎、斜三個方向湊齊三個棋子就獲得勝利。
1、繪制棋盤
2、實現鼠標點擊繪制棋子
3、根據flag值,判斷游戲勝負
4、展示每局游戲情況。
由于邏輯十分簡單,所以直接上代碼。
int maps[][] = new int[][]{{0,0,0},{0,0,0},{0,0,0}};//井字棋 int ClickedNum=0;//有效點擊次數 int flag=0;//狀態 int red=0;//紅方獲勝局數 int green=0;//綠方獲勝局數 int tie;//平局局數 int mark=0; PFont font; void setup() {size(800,800);background(255,255,255);//smooth(8);surface.setResizable(true);//手動調節窗口大小pixelDensity(displayDensity());//高分辨率時自動調節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("繼續游戲",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()//判斷游戲結果 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("游戲結束,平局!",380,550);noFill();}else if(flag == 1){fill(255,0,0);textFont(font,20);textAlign(CENTER);text("游戲結束,紅方勝利!",380,550);noFill();}else if(flag == 2){fill(0,255,0);textFont(font,20);textAlign(CENTER);text("游戲結束,綠方勝利!",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; }三、實現效果
歡迎發表意見!!!
總結
以上是生活随笔為你收集整理的使用Processing实现井字棋的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cisco AnyConnect 报错
- 下一篇: 浅谈:刷机必备神器,不断更新