一、 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实现井字棋相关推荐

  1. 面向对象以及运用最大最小搜索的井字棋设计(附源码)

    一:实验题目 井字棋游戏设计 利用面向对象程序设计的知识,通过设计board.player.game类,实现一个具有人人对弈.人机对弈以及机机对弈的井字棋游戏. 要求: ①对类设置和实现的要求 1.封 ...

  2. python编写井字棋_编写井字游戏

    python编写井字棋 Programming computer games may be the most technically challenging (and possibly the bes ...

  3. LeetCode简单题之找出井字棋的获胜者

    题目 A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上. 第一个玩家 A 总是用 "X" 作 ...

  4. python井字棋_用Python做一个井字棋小游戏

    井字棋是一个经典的小游戏,在九宫格上玩家轮流画OXO,当每列或每行或是两个对角成一线时便是获胜. 今天就用Python编写一个井字棋小游戏,与电脑对战. 程序执行画面如下图所示: 程序提供了两种人工智 ...

  5. 组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战

    来源 | MyEncyclopedia 上一篇我们从原理层面解析了AlphaGo Zero如何改进MCTS算法,通过不断自我对弈,最终实现从零棋力开始训练直至能够打败任何高手.在本篇中,我们在已有的N ...

  6. python小游戏系列井字棋,儿时的回忆

    hello大家好,今天我又发现了个有趣的小玩意.我是专写有趣小玩意的老诗. 相信大家对于井字棋都并不陌生.现在也能找到各种各样的井字棋小游戏玩.那么你们自己是否会编写呢?接下来老诗用python教大家 ...

  7. php井字游戏,python实现井字棋游戏

    #本游戏python3.4.0下编写调试,只能在windows下运行. import random import subprocess import time #定义函数 def draw_board ...

  8. Minimax 和 Alpha-beta 剪枝算法简介,及以此实现的井字棋游戏(Tic-tac-toe)

    前段时间用 React 写了个2048 游戏来练练手,准备用来回顾下 React 相关的各种技术,以及试验一下新技术.在写这个2048的过程中,我考虑是否可以在其中加入一个 AI 算法来自动进行游戏, ...

  9. C++井字棋游戏,DOS界面版

    据说有一个能保证不败的算法.明天看看先再写个PVC版的. 正题.今天无聊写了个井字棋游戏,顺便逐渐让自己习惯良好的代码风格,放上来给新手学习学习. jzq2.cpp /*N字棋游戏PVP版,DOS版本 ...

最新文章

  1. Docker将容器制作成镜像并提交到远程仓库
  2. 树莓派配置路由_树莓派安装Ubuntu 20.04 LTS并配置
  3. 若依前后端分离版源码分析-前端头像上传后传递到后台以及在服务器上存储和数据库存储设计
  4. Bug之本地可以发送邮件 测试服不行
  5. IT人回家过年的尴尬
  6. 使用mpvue开发小程序
  7. STM32的map文件学习笔记
  8. 使用Builder模式创建复杂可选参数对象
  9. 惊!史上最佳GAN现身,超真实AI假照片,行家们都沸腾了
  10. sublime出现中文乱码
  11. img 标签如何使图片成为圆形
  12. 《华为机试》刷题之HJ77 火车进站
  13. 只安装XCode’s Com­mand line tools不安装XCode
  14. 创建create-react-app myapp项目报错
  15. sqlplus报错ORA-12547: TNS:lost contact解决
  16. IEC61400-6 2020 塔架及基础设计要求 附录K 翻译
  17. 腾讯副总裁邱岳鹏:云的发展要迈过三道关
  18. 极客时间 IT 20+ 张 各架构 高清技能图谱
  19. 使用hbase来解决上亿条数据的准实时响应
  20. 微信、QQ可以聊天,但是网页打不开,解决方法之一

热门文章

  1. c++课程设计日历记事本
  2. vim setting
  3. 别再鼓吹神通广大的黑客了 只有务实才能让高管和董事会加大网络安全投入
  4. 从 Google AI 离职了,这里让我爱不起来
  5. 从Python到TensorFlow,差点把我 六年的电脑砸了,哈哈哈哈(详细安装入门步骤)
  6. WPF编程,使用字体图标的一种方法。
  7. 《Linux就该这么学》读书笔记
  8. 我所学到的EC-2(个人学习总结,不能保证正确,欢迎大佬指正)
  9. java开发用i5还是i7,酷睿i3和i5以及i7有什么区别
  10. vue:hadoop@1.0.0 dev: `webpack-dev-server --inline --progress --config build/webpack.dev.conf.js