围棋(改进版)源代码-Java Applet小程序

合集下载

APPLET程序

APPLET程序

图 2.2 Java Applet的下载执行过程
从这个过程中可以看出,Java Applet的字节码程序最早 是保存在 Web 服务器上的,而它的运行过程则是在下载到 本地后在本地机上完成的,这实际上就是网络应用程序的 发布过程。 当 Applet 程序需要修改或维护时只要改动服务器一处的 程序即可。 当然,这样做的前提条件是Applet的字节码程序可以在网 络上的任何一台机器上顺利地运行,而这种跨平台的要求, 根据前面的介绍,已由Java的解释器机制加以保证和实现 。
当浏览器执行 Applet 程序时,会自动产生两个实例(两个对 象),一个是系统类 Applet 的子类的实例,另一个是系统类 Graphics的实例。前者调用Applet的子类的实例中paint方法, 后者作为实际参数赋值给paint方法中的形式参数g。
g 是系统类 Graphics 的一个对象,它代表了 Web 页面上 Applet程序的界面区域的背景,调用g的方法来显示字符串, 就是在当前Applet程序的界面区域的背景上显示字符串。 虽然Java Application和Java Applet在运行方式上有很大 的不同,但是它们遵循相同的 Java 语言的语法规则,所以 编译时也使用完全相同的编译工具。 例如: javac MyJavaApplet.java 编译的结果在当前目录下将生成一个以源代码中的类名 MyJavaApplet命名的字节码文件MyJavaApplet.class。
(4)当用户编写的 Applet程序编译通过后,就可以使WWW 浏览器在解释执行 HTML文件时,调用该 Applet 程序。通过 自动执行用户改写过的成员方法,例如paint方法,来实现用 户程序预期的功能。
系 统 类 Applet 中 已 经 定 义 好 的 成 员 方 法 还 有 , init();start();stop();destroy(); 它们与 paint 方法使用的方式类 似。 paint 方法与其他的一些 Applet 中的方法一样,能够被 WWW浏览器识别和在恰当的时刻自动调用。

围棋程序的VB源代码

围棋程序的VB源代码

论文大概:关键词:围棋递归序言:围棋棋盘程序摘要:文章重点阐述了围棋中判断死活功能和提子功能部分的设计和实现,通过递归法实现围棋中死棋(0气块)的判断以及提子算法。

另外还介绍了一些围棋对弈中的规则以及其他一些围棋编程算法,通过与这些算法的对比,体现了用不同的方法所实现的功能在不同领域的应用。

在本程序中,完成了围棋对弈中对死棋的判断和提去的功能实现,对本人来讲实现此系统的功能收获很大,学到了以前不曾学过的东西,也巩固了以前学过的知识。

这将为我以后从事此方面的工作奠定了结实的基础。

本文主要阐述了如何设计和实现可以在单片机上运行的围棋棋盘算法,对实现双人对弈中的死活算法做了详细说明,对系统所要求的运行环境、基本技术也作了简要论述。

围棋棋盘程序3 AbstractThis essay introduces how to design a process to calculate the steps of the game of “go” on SCM. It explains how to do the calculation in the battle of two to prove who wins the game. And it briefly states the necessary processing environment of the system and the basic techniques needed. The recursive method used to judge whether the black/white pieces are still alive or not and the way to calculate how many black/white pieces can be removed are the focus of the essay. Besides, some rules of this game and some other processes to calculate the result of the game are also included here, with the hope of making some comparison between these different processes.Keywords: VHDL(Very High Speed Integrated Circuit Hardware Description Language); ASIC(Application Specific IC); PLD(Programmable Logic Device); CPLD(Complex Programmable Logic Device); FPGA(Field Programmable Gate Array); MAX+PLUSII(Multiple Array Matrix And Programmable Logic User Systems)(围棋) I-go (递归)the recursive method 算法……4 目录摘要 IIAbstract II目录 III第一章前言 01.1 编写目的 01.2 项目背景 0第二章可行性研究 22.1 基本要求 22.1.1 功能 22.1.2 性能 22.1.3 处理流程 22.1.4 完成期限 32.2 具备的条件 32.2.1 硬件和软件环境方面的条件 32.2.2 软件方面的技术介绍 32.3 小结 3第三章系统的总体结构和模块结构设计 43.1 系统的总体结构图 43.2 系统的总体布局 53.3 功能的模块设计 53.3.1 外围模块的设计 53.3.2 系统的功能控制模块 53.3.3 系统设定模块 53.3.4 系统帮助模块 63.4 系统连接的基本方框图 6第四章开发工具和软件运行环境 64.1 系统的开发工具 64.2 软件运行环境 6第五章系统设计的基本原理和功能框图 65.1 系统设计的基本原理 65.2 系统的功能框图 6第六章系统的实现 76.1 用户界面的设计 76.4 使用的主要技术 8第七章代码的设计 97.1 代码设计的结构 97.2 部分自定义函数的功能介绍及详细代码 97.3 部分源程序代码 10第八章程序编制时遇到的问题 108.1 在程序编制过程中遇到的一系列问题和解决的方法 108.2 在程序调式中进行排错和纠错解决问题 11第九章总结 14总结 14参考文献 165 第一章前言5.1 1.1 编写目的随着社会的迅速发展,人民的物质生活水平不断提高,人们也有更多的时间安排在娱乐上面,另外随着电子工业的迅速发展,手机游戏、掌上游戏、电视游戏的不断的普及,游戏的种类也在不断增加,人们越来越希望能用自己简易的设备玩转更多的游戏。

五子棋源代码-Java_Applet小程序

五子棋源代码-Java_Applet小程序

五子棋源代码-Java_Applet小程序importjava.applet.Applet; importjava.awt.*;importjava.util.Random;public class wzq extends Applet implements Runnable{public void stop(){LoopThread = null;}privateintCalcZi(inti, int j, byte byte0){CXY cxy = new CXY(); int k = 0;int l = 0;do{int i1 = 0;int j1 = 0;do{cxy.x = i;cxy.y = j;if(MoveAGrid(cxy, l + 4 * j1) &&QiPan[cxy.x][cxy.y] == byte0) do{ if(QiPan[cxy.x][cxy.y] == 0 || QiPan[cxy.x][cxy.y] != byte0) break;i1++;} while(MoveAGrid(cxy, l + 4 * j1));}while(++j1 < 2);if(i1 > k)k = i1;}while(++l < 4);return ++k;}privatebooleanCanDo(){return steps < ((GRIDSUM * GRIDSUM) / 100) * 80;}//电脑下棋privateintCPUDo(CXY cxy, byte byte0){intai[] = new int[2];int ai1[] = new int[2];int ai2[] = new int[2];boolean flag = false;EnterTimes++;ai2[0] = 0;for(inti = recLU.x; i<= recRD.x; i++){for(int k = recLU.y; k <= recRD.y; k++){int l = 0;if(QiPan[i][k] == 0){DoAStep(i, k, byte0);l = CalcCPU(i, k, byte0);}if(l > 0){int i1 = 0;byte byte1;if(byte0 == 1)byte1 = 2; elsebyte1 = 1; if(EnterTimes<= level && steps < ((GRIDSUM * GRIDSUM) / 100) * 80)i1 = CPUDo(cxy, byte1);l += i1;if(l + Math.abs(rd.nextInt()) % 5 > ai2[0] || !flag){ai[0] = i;ai1[0] = k;ai2[0] = l;flag = true;}QiPan[i][k] = 0;}}}if(EnterTimes<= 1){cxy.x = ai[0];cxy.y = ai1[0];int j = 0;do{try{Thread.sleep(300L);}catch(InterruptedException _ex) { } QiPan[cxy.x][cxy.y] = byte0;repaint();try{Thread.sleep(300L);}catch(InterruptedException _ex) { } QiPan[cxy.x][cxy.y] = 0; repaint(); }while(++j < 2);}EnterTimes--;return ai2[0];}public void ClearPan(){for(inti = 0; i< GRIDSUM; i++){for(int j = 0; j < GRIDSUM; j++) QiPan[i][j] = 0;}scHong = 0;scHei = 0;steps = 0;recLU.x = 8;recRD.x = 9;recLU.y = 8;recRD.y = 9;}privatebooleanMoveAGrid(CXY cxy, inti){boolean flag = false;i %= 8;int j = cxy.x + oAdd[i][0]; int k = cxy.y + oAdd[i][1]; if(j >= 0 && j < GRIDSUM && k >= 0 && k < GRIDSUM){cxy.x = j;cxy.y = k;flag = true;}return flag;}public void paint(Graphics g){super.paint(g);for(inti = 0; i< GRIDSUM + 1; i++){g.drawLine(0, i * GRIDWIDTH, GRIDSUM * GRIDWIDTH, i * GRIDWIDTH);g.drawLine(i * GRIDWIDTH, 0, i * GRIDWIDTH, GRIDSUM * GRIDWIDTH);}for(int j = 0; j < GRIDSUM; j++){for(int k = 0; k < GRIDSUM; k++) drawQi(g, j, k, QiPan[j][k]);}}private void CPUInit(){PosAdd[0][0] = 8;PosAdd[0][1] = -2;PosAdd[1][0] = -2;PosAdd[0][2] = 3;PosAdd[2][0] = 3;PosAdd[0][3] = 2;PosAdd[3][0] = 2; PosAdd[1][1] = -7; PosAdd[1][2] = -1; PosAdd[2][1] = -1; PosAdd[1][3] = -1; PosAdd[3][1] = -1;PosAdd[2][2] = 4; PosAdd[3][3] = 4; PosAdd[2][3] = 4; PosAdd[3][2] = 4;}public void mouseDOWNThis(Event event){if(playerdo)xiazi.put(event.x, event.y);}privateintDoAStep(inti, int j, byte byte0){if(QiPan[i][j] != 0 || byte0 == 0 || byte0 > 2){return 0;}else{QiPan[i][j] = byte0; return 1;}}private void FreshRec(inti, int j){if(i - recLU.x< 2){recLU.x = i - 2;if(recLU.x< 0)recLU.x = 0;}if(recRD.x - i< 2){recRD.x = i + 2;if(recRD.x>= GRIDSUM) recRD.x = GRIDSUM - 1; }if(j - recLU.y< 2){recLU.y = j - 2;if(recLU.y< 0)recLU.y = 0;}if(recRD.y - j < 2){recRD.y = j + 2;if(recRD.y>= GRIDSUM) recRD.y = GRIDSUM - 1;}}publicwzq(){GRIDWIDTH = 18;GRIDSUM = 18; QiPan = new byte[GRIDSUM][GRIDSUM];oAdd = new int[8][2]; playing = false;playerdo = true;xy = new CXY();xiazi = new CXiaZi(); rd = new Random(); recLU = new CXY(); recRD = new CXY(); PosAdd = new int[4][4];}public void update(Graphics g){paint(g);}//画棋public void drawQi(Graphics g, inti, int j, int k){switch(k){case 0: // '\0'g.clearRect(i * GRIDWIDTH + 1, j * GRIDWIDTH + 1, GRIDWIDTH -2,GRIDWIDTH - 2);return;case 1: // '\001'g.setColor(Color.red);g.fillArc(i * GRIDWIDTH + 2, j * GRIDWIDTH + 2, GRIDWIDTH -4,GRIDWIDTH - 4, 0, 360);return;case 2: // '\002'g.setColor(Color.black);break;}g.fillArc(i * GRIDWIDTH + 2, j * GRIDWIDTH + 2, GRIDWIDTH -4,GRIDWIDTH - 4, 0, 360);}public void start(){if(LoopThread == null)LoopThread = new Thread(this, "wbqloop"); LoopThread.setPriority(1);LoopThread.start();}public void run(){for(; Thread.currentThread() == LoopThread; xiazi.get(xy)) {ClearPan();repaint();playing = true;//谁先下随机who = (byte)(Math.abs(rd.nextInt()) % 2 + 1); for(passes = 0; playing && passes < 2;){if(who == 1){lblStatus.setText("\u7EA2\u65B9\u4E0B");lblStatus.setForeground(Color.red);}else{lblStatus.setText("\u9ED1\u65B9\u4E0B");lblStatus.setForeground(Color.black);}if(steps < ((GRIDSUM * GRIDSUM) / 100) * 80){passes = 0;if(who == 1) //人下棋{xiazi.get(xy);for(; DoAStep(xy.x, xy.y, who) == 0; xiazi.get(xy)); scHong = CalcZi(xy.x, xy.y, who); FreshRec(xy.x, xy.y); steps++;}else //机器下棋{if(scHong == 0 &&scHei == 0){ xy.x = 9;xy.y = 9;} else{ CPUDo(xy, who);} for(; DoAStep(xy.x, xy.y, who) == 0; CPUDo(xy, who)); scHei = CalcZi(xy.x, xy.y, who); FreshRec(xy.x, xy.y); steps++;}}else{passes = 2;}if(scHong>= 5 || scHei>= 5) playing = false; repaint();//交换下棋方who = (byte)((1 - (who - 1)) + 1); Thread.yield(); }if(scHong>= 5) //红方胜{Status = "\u7EA2\u65B9\u80DC!";lblStatus.setForeground(Color.red); LoseTimes++; }else if(scHei>= 5)//黑方胜{Status = "\u9ED1\u65B9\u80DC!";lblStatus.setForeground(Color.black);if(LoseTimes> 0)LoseTimes--;}else //平局{Status = "\u4E0D\u5206\u80DC\u8D1F!";}lblStatus.setText(Status); repaint();}}//入口,开始下棋,初始化public void init() {super.init(); LoopThread = null; oAdd[0][0] = 0; oAdd[0][1] = -1; oAdd[1][0] = 1; oAdd[1][1] = -1; oAdd[2][0] = 1; oAdd[2][1] = 0; oAdd[3][0] = 1; oAdd[3][1] = 1; oAdd[4][0] = 0; oAdd[4][1] = 1; oAdd[5][0] = -1; oAdd[5][1] = 1; oAdd[6][0] = -1; oAdd[6][1] = 0; oAdd[7][0] = -1; oAdd[7][1] = -1; CPUInit();setLayout(null);resize(325, 352);lblStatus = new Label("Welcome"); lblStatus.setFont(new Font("Dialog", 1, 14));add(lblStatus);lblStatus.reshape(14, 332, 175, 15);lblLevel = new Label("JAVA\u4E94\u5B50\u68CB");lblLevel.setFont(new Font("Dialog", 1, 14));add(lblLevel);lblLevel.reshape(196, 332, 119, 15);}publicbooleanhandleEvent(Event event){if(event.id != 501 || event.target != this){returnsuper.handleEvent(event);}else{mouseDOWNThis(event);return true;}}privateintCalcCPU(inti, int j, byte byte0){CXY cxy = new CXY();String s = "";String s2 = "";String s4 = ""; byte byte1 = 0;CalcTimes++;if(byte0 == 1)byte1 = 2; elseif(byte0 == 2)byte1 = 1; int k = 0;int l = 0;do{int i1 = 0;String s1 = "";String s3 = "";String s5 = ""; int j1 = 0;do{int k1 = 0;cxy.x = i;for(cxy.y = j; MoveAGrid(cxy, l + 4 * j1) && k1 < 6 &&QiPan[cxy.x][cxy.y] != byte1; k1++) if(QiPan[cxy.x][cxy.y] == byte0) {if(j1 == 0)s3 += "1"; elses5 = "1" + s5; i1++;}elseif(j1 == 0)s3 += "0"; elses5 = "0" + s5;if(j1 == 0)s3 += "2";elses5 = "2" + s5;}while(++j1 < 2);i1++;s1 = s5 + "1" + s3;if(s1.indexOf("11111") != -1)i1 += 1000;elseif(s1.indexOf("011110") != -1)i1 += 500;elseif(s1.indexOf("211110") != -1 || s1.indexOf("011112") != -1 || s1.indexOf("01110") != -1 || s1.indexOf("01110") != -1 ||s1.indexOf("011010")!= -1 || s1.indexOf("010110") != -1 || s1.indexOf("11101") != -1 || s1.indexOf("10111") != -1 ||s1.indexOf("11011") != -1)i1 += 100;elseif(s1.indexOf("21110") != -1 || s1.indexOf("01112") != -1 ||s1.indexOf("0110") != -1 || s1.indexOf("211010") != -1 ||s1.indexOf("210110")!= -1)i1 += 20;if(l == 1 || l == 3)i1 += (i1 * 20) / 100;k += i1;}while(++l < 4); if(CalcTimes<= 1)k += CalcCPU(i, j, byte1);elseif(k > 10)k -= 10; CalcTimes--;return k;}int GRIDWIDTH; //网格宽度int GRIDSUM; //网格总数byte QiPan[][]; //棋盘intoAdd[][];Thread LoopThread;intscHong; //红方intscHei; //黑方byte who; //byte winner; //赢方boolean playing; booleanplayerdo; CXY xy;CXiaZixiazi; //下子String Status; //状态Random rd; //随机数 int passes;int steps;intLoseTimes;CXY recLU;CXY recRD; intPosAdd[][]; int level; intEnterTimes; intCalcTimes;Label lblStatus;Label lblLevel; }classCXiaZi{public synchronized void get(CXY cxy) {ready = false;notify();while(!ready)try{wait();}catch(InterruptedException _ex) { }ready = false;notify();cxy.x = xy.x;cxy.y = xy.y;}public synchronized void put(inti, int j){if(i< GRIDWIDTH * GRIDSUM && j < GRIDWIDTH * GRIDSUM) {xy.x = i / GRIDWIDTH; xy.y = j / GRIDWIDTH; ready = true; notify();}}publicCXiaZi(){GRIDWIDTH = 18;GRIDSUM = 18; xy = new CXY();ready = false;}private CXY xy;privateboolean ready; privateint GRIDWIDTH; privateint GRIDSUM; } class CXY{public CXY(){x = 0;y = 0;}publicint x; publicint y; }内部资料,请勿外传~。

绘制围棋棋盘java课程设计

绘制围棋棋盘java课程设计

绘制围棋棋盘java课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:学生需要掌握Java编程语言的基本语法和编程技巧,了解围棋棋盘的基本知识和绘制方法。

2.技能目标:学生能够运用Java编程语言独立绘制一个围棋棋盘,并能够进行基本的调试和优化。

3.情感态度价值观目标:培养学生对编程和围棋的兴趣,提高学生的创新能力和解决问题的能力。

二、教学内容教学内容将按照以下大纲进行和安排:1.第一章:Java编程语言基础,包括变量、数据类型、运算符、控制语句等基本语法。

2.第二章:Java面向对象编程,包括类、对象、继承、多态等概念。

3.第三章:围棋棋盘的基本知识,包括围棋的规则和棋盘的布局。

4.第四章:绘制围棋棋盘,利用Java编程语言实现棋盘的绘制和功能。

三、教学方法本课程将采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解Java编程语言的基本语法和围棋棋盘的基本知识。

2.案例分析法:通过分析实际案例,引导学生运用Java编程语言绘制围棋棋盘。

3.实验法:学生动手实践,独立绘制围棋棋盘,并进行调试和优化。

四、教学资源教学资源包括以下几个方面:1.教材:《Java编程语言基础》和《围棋棋盘绘制教程》。

2.参考书:提供相关的Java编程和围棋棋盘的参考书籍。

3.多媒体资料:制作PPT和教学视频,用于辅助讲解和演示。

4.实验设备:提供计算机和围棋棋盘,供学生实践操作。

五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:评估学生在课堂上的参与程度、提问回答和小组讨论的表现。

2.作业:评估学生提交的编程练习和围棋棋盘绘制作业的质量和完成度。

3.考试:期末进行一次Java编程和围棋棋盘绘制相结合的考试,测试学生的综合运用能力。

评估方式应客观、公正,能够全面反映学生的学习成果。

教师应及时给予反馈,帮助学生提高。

六、教学安排本课程的教学安排如下:1.教学进度:按照大纲进行,确保每个章节都有足够的时间进行讲解和实践。

15╳15围棋棋盘五子棋JAVA语言课程设计报告

15╳15围棋棋盘五子棋JAVA语言课程设计报告

目录一、设计要求 (2)二、设计步骤 (2)2.1程序流程图 (2)2.2程序的功能分配 (3)三、设计正文 (6)3.1创建棋盘类 (6)3.2判断输赢功能实现 (9)3.3测试结果 (9)四、心得体会 (12)五、参考文献 (12)附录(源代码) (13)一、课程设计要求设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能:1.选择落子的先后顺序2.重置棋盘3.刷新重新开始4.退出提示并且规定退出者判为负,但退出过程中要有提示。

以防不小心点错了。

最后判断某一方是否为五子连珠。

实现一个简单的多用户五子棋的游戏程序,包括如下两个界面(1)选择对弈桌(执黑、执白)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);二、设计步骤2.1程序流程图2.2 程序的功能分配a. 棋盘的绘制public void draw_qipan(Graphics G) //画棋盘 15*15{G.setColor(Color.lightGray);G.fill3DRect(10,10,300,300,true);G.setColor(Color.black);for(int i=1;i<16;i++){G.drawLine(20,20*i,300,20*i);G.drawLine(20*i,20,20*i,300);}}b. 添加按钮Button b1=new Button("开始");Button b2=new Button("重置游戏");Label lblWin=new Label(" ");Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button("退出");public void init(){ckbHB[0]=new Checkbox("执白",ckgHB,false);ckbHB[1]=new Checkbox("执黑",ckgHB,false);ckbHB[2]=new Checkbox("观看",ckgHB, false);}c. 鼠标棋子的触发事件public void mouseClicked(MouseEvent e) {Graphics g=getGraphics();int x1,y1;x1=e.getX();y1=e.getY();if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) { return;}if (x1%20>10) {x1+=10;}if(y1%20>10) {y1+=10;}x1=x1/20*20;y1=y1/20*20;set_Qizi(x1,y1);m*=(-1);}d. 按钮的触发事件public void actionPerformed(ActionEvent e) {Graphics g=getGraphics();if (e.getSource()==b1) {Game_start();}else{Game_re();}if(e.getSource()==exist){Game_re();lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");intGame_Start=0;}e. 判断落子的位置及画出相应的黑白棋子public void set_Qizi(int x,int y) //落子{if (intGame_Start==0) //判断游戏未开始{return;}if (intGame_Body[x/20][y/20]!=0) {return;}Graphics g=getGraphics();if (color_Qizi==1)//判断黑子还是白子{g.setColor(Color.black);color_Qizi=0;}else{g.setColor(Color.white);color_Qizi=1;}g.fillOval(x-10,y-10,20,20);intGame_Body[x/20][y/20]=color_Qizi+1;}f. 判断胜负if (Game_win_1(x/20,y/20)) //判断输赢1{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_2(x/20,y/20)) //判断输赢2{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_3(x/20,y/20)) //判断输赢3{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_4(x/20,y/20)) //判断输赢4{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}}三、设计正文3.1创建棋盘类Public class WcyChess extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子int intGame_Start=0;//游戏开始标志 0未开始 1游戏中int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态int m=-1;Button b1=new Button("开始");Button b2=new Button("重置游戏");Label lblWin=new Label(" ");Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button("退出");CheckboxGroup ckgHB=new CheckboxGroup();NetchatClient chat=new NetchatClient();public void init(){setLayout(null);addMouseListener(this);add(b1);b1.setBounds(330,50,80,30);b1.addActionListener(this);add(b2);b2.setBounds(330,90,80,30);b2.addActionListener(this);ckbHB[0]=new Checkbox("执白",ckgHB,false);ckbHB[0].setBounds(320,20,60,30);ckbHB[1]=new Checkbox("执黑",ckgHB,false);ckbHB[1].setBounds(380,20,60,30);ckbHB[2]=new Checkbox("观看",ckgHB, false);add(ckbHB[0]);add(ckbHB[1]);add(ckbHB[2]);ckbHB[0].addItemListener(this);ckbHB[1].addItemListener(this);add(lblWin);lblWin.setBounds(330,180,80,30);lblWin.setBackground(Color.red);lblWin.setText("胜利者!");//没有显示?ckbHB[2].setBounds(440, 20,60, 30);add(exist);exist.setBounds(330,130,80,30);exist.addActionListener(this);// add(chat);chat.setBounds(20, 500, 300, 300);chat.frame();chat.setVisible(true);Game_start_csh();setSize(500,600);setVisible(true);}public void itemStateChanged(ItemEvent e) {if (ckbHB[0].getState()) //选择黑子还是白子{color_Qizi=0;}else{color_Qizi=1;}}public void mousePressed(MouseEvent e){}public void mouseClicked(MouseEvent e) {Graphics g=getGraphics();int x1,y1;x1=e.getX();y1=e.getY();if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) { return;}if (x1%20>10) {x1+=10;}if(y1%20>10) {y1+=10;}x1=x1/20*20;y1=y1/20*20;set_Qizi(x1,y1);m*=(-1);}public void actionPerformed(ActionEvent e) {Graphics g=getGraphics();if (e.getSource()==b1) {Game_start();}else {Game_re();}if(e.getSource()==exist){Game_re();lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");intGame_Start=0;}}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseReleased(MouseEvent e){}public void mouseDragged(MouseEvent e){}public void mouseMoved(MouseEvent e){}public void paint(Graphics g) {draw_qipan(g);}3.2判断输赢功能实现if (Game_win_1(x/20,y/20)){ //判断输赢1lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_2(x/20,y/20)){ //判断输赢2lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_3(x/20,y/20)) //判断输赢3{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_4(x/20,y/20)) //判断输赢4{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}3.3 测试结果a. 进入游戏界面游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。

绘制围棋棋盘java课程设计

绘制围棋棋盘java课程设计

绘制围棋棋盘java课程设计一、课程目标知识目标:1. 理解Java语言中面向对象编程的基本概念,掌握类和对象的使用。

2. 学会使用Java中的图形用户界面(GUI)组件,实现图形界面的绘制。

3. 学习二维数组的使用,将其应用于围棋棋盘的布局。

技能目标:1. 能够运用Java编程语言,设计并实现一个绘制围棋棋盘的程序。

2. 培养学生独立思考、分析问题和解决问题的能力,学会调试和优化程序。

3. 提高学生的团队协作能力,通过小组合作完成课程设计。

情感态度价值观目标:1. 培养学生对中国传统文化(围棋)的兴趣,增强文化自信。

2. 培养学生勇于尝试、不断探索的精神,激发学习编程的热情。

3. 引导学生树立正确的竞争与合作观念,培养良好的团队合作精神。

课程性质:本课程为信息技术学科,以Java编程语言为基础,结合围棋棋盘绘制,培养学生编程实践能力和团队合作精神。

学生特点:学生处于初中年级,具备一定的编程基础,对新鲜事物充满好奇,喜欢动手实践。

教学要求:注重理论与实践相结合,充分调动学生的主观能动性,鼓励学生积极参与,关注个体差异,提高学生的编程能力和综合素质。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. Java面向对象编程基础:复习类与对象的概念,构造方法,属性与方法的使用。

2. Java图形用户界面(GUI):介绍Swing库中基本组件的使用,重点讲解JFrame、JPanel以及绘图相关的Graphics类。

- 教材章节:第三章《Java的图形用户界面编程》3. 二维数组:二维数组的声明、初始化,以及如何遍历和应用二维数组表示围棋棋盘。

- 教材章节:第二章《Java数组与字符串》4. 围棋棋盘绘制:结合二维数组,使用Java GUI技术实现围棋棋盘的绘制。

5. 程序调试与优化:教授学生如何使用调试工具,对程序进行调优,提高程序效率。

6. 团队合作与项目实践:分组进行项目实践,培养学生团队协作能力,共同完成围棋棋盘绘制项目。

围棋微信小程序的设计与实现-毕业论文+开题报告

围棋微信小程序的设计与实现-毕业论文+开题报告
通过对国内小程序现状与小程序技术进行调查研究,并设计出一款基于微信小程序的围棋游戏,主要功能为可以与朋友在一个手机里对战围棋,且具备棋盘重置与悔棋功能,查看这类型小程序设计网上报道较少,对学生熟悉小程序编写具有实战意义。
指导教师签字:
年 月 日
答辩小组意见:
组长签字:
年 月 日
[指导教师、答辩小组意见应从不同的角度,有针对性的撰写]
在盈利点方面,现有广告传播和购买虚拟游戏币两种盈利方式,小程序游戏在未来会有新的盈利方式出现吗,做为用户来说,传统端游需要经过跳转扫码支付或购买点卡来充值,小程序里支付体验是一站式的,小程
序游戏对比传统移动端游戏最大的优势是小程序游戏支付的便利性。[6]且小游戏传播的速率非常快,一个比较有趣的小程序游戏可能会让你玩上一整天可以考虑推出小程序游戏实体化周边并在线上售卖以获取盈利。[7-8]可以搭建小程序游戏和线下活动的连接,譬如音乐节的时候可以联动音乐小游戏推出当天表演曲目,在音乐节场地摆放小程序二维码,让音乐爱好者们爱屋及乌,相当于把线下音乐节的流量引导到线上小程序游戏里来。[9]而小程序游戏上线表演者的曲目,也变相为表演者和音乐节带去了流量,相当于线上小程序的流量转化到线下音乐节和表演者身上。综上所述,小程序游戏与生活息息相关,对其技术实现与游戏功能的研究及优化具有重大的意义。
[13] Silver D, Huang A, Maddison C J, et al. Mastering the game of Go with deep neural networks and tree search[J]. Nature, 2016, 529 (7587):484-489.
指导教师意见
[4]刘玉佳.微信“小程序”开发的系统实现及前景分析[J].信息通信,2017(01):260-261.

Java applet(小程序)介绍

Java applet(小程序)介绍
Applet的类必须为public,且它的名称必须与它所在的文件名匹配;在这里,
就是HelloWorld.java。而且,该类必须为java.applet.Applet的子类。
Applet类的层次
Java.applet.Applet类实际上是java.awt.Panel的子类。Applet和AWT类本节讨论了JDK对Applet的支持,以及Applet在编程方式、操作上下文和
如何开始等方面与应用程序的区别。
7.1·什么是Applet?
Applet是能够嵌入到一个HTML页面中,且可通过Web浏览器下载和执行的
一种Java类。它是Java技术容器(container)的一种特定类型,其执行
格式来表示。
注-这个文件与你要装入的HTML文件的基URL有关,它不能含有路径名。
这样。在构造函数完成了它的任务后,浏览器调用init()对Applet进行
基本的初始化操作。init()结束后,浏览器调用另一个称为start()的方法。
本模块稍后将对start()做更细致的剖析;start()通常在Applet成为可见
时被调用。方法init()和start()都是在Applet成为"活动的"之前运行
stop()方法是在Applet成为不可见时被调用的,这种情况一般在浏览器被
图标化或链接到另一个URL时会出现。Applet用该方法使动画停止。
1.public void stop() {
2.musicClip.stop();
3.}
start()和stop()形成一对动作:典型地,start()激活Applet中的某一行为,
参数总是建立该Applet的panel的图形上下文。你能用这个上下文在你的

python围棋游戏设计的报告

python围棋游戏设计的报告

python围棋游戏设计的报告Python围棋游戏设计报告一、需求概述本项目是一款Python编写的围棋游戏程序,旨在为用户提供一个简单易用、功能齐全的围棋游戏。

主要功能包括:双人对弈、计分、悔棋、保存进度等。

二、设计思路1.图形化界面设计采用Pygame模块,设计游戏主界面。

游戏主界面包括棋盘、计分、游戏状态等组件。

2.数据结构设计为了实现围棋规则,需要先定义棋盘和棋子的数据结构。

通过二维列表来记录棋盘状态,0代表空子,1代表黑子,2代表白子。

3.游戏逻辑设计通过Pygame的事件模块,实现鼠标点击棋盘的交互。

通过判断是否为合法落子位置来确定下子有效性。

在落子后需要判断是否形成了禁手等规则。

4.悔棋、计分、保存进度悔棋操作通过保存历史棋局状态实现,计分通过计算己方和对方的棋子数量实现,保存进度则通过pickle模块实现。

三、编程实现1.导入必要的模块和库:```import pygame, sysfrom pygame.locals import *import pickle```2.初始化游戏界面,包括界面大小、标题、颜色等参数。

```pygame.init()FPS = 30fpsClock = pygame.time.Clock()WIDTH = 640HEIGHT = 740BOARD_SIZE = 600BORDER_SIZE = 20TITLE_SIZE = 40WHITE = (255,255,255)BLACK = (0,0,0)BG_COLOR = (205, 170, 125)TITLE_COLOR = (50, 50, 50)```3.定义棋盘和棋子数据结构:```GRID_SIZE = 30 #网格间隔GRID_NUM = BOARD_SIZE / GRID_SIZE #网格数量board = [[0 for x in range(GRID_NUM)] for y in range(GRID_NUM)]def getRowCol(pos):x, y = posrow = min(range(0, BOARD_SIZE+1, GRID_SIZE), key=lambda i: abs(i-y))col = min(range(0, BOARD_SIZE+1, GRID_SIZE), key=lambda i: abs(i-x))return row, coldef drawBoard():for row in range(GRID_NUM):pygame.draw.line(DISPLAYSURF, BLACK, (BORDER_SIZE, BORDER_SIZE+GRID_SIZE*row), (BORDER_SIZE+BOARD_SIZE, BORDER_SIZE+GRID_SIZE*row), 1)for col in range(GRID_NUM):pygame.draw.line(DISPLAYSURF, BLACK, (BORDER_SIZE+GRID_SIZE*col, BORDER_SIZE), (BORDER_SIZE+GRID_SIZE*col, BORDER_SIZE+BOARD_SIZE), 1)center = (BORDER_SIZE+GRID_SIZE*col, BORDER_SIZE+GRID_SIZE*row)radius = GRID_SIZE / 2 - 2if board[row][col] == 1:pygame.draw.circle(DISPLAYSURF, BLACK, center, radius)elif board[row][col] == 2:pygame.draw.circle(DISPLAYSURF, WHITE, center, radius)```4.判断落子有效性:```def checkValid(row, col, color):if row < 0 or col < 0 or row >= GRID_NUM or col >= GRID_NUM or board[row][col] != 0: return Falseboard[row][col] = colorif hasAir(row, col):return Trueif hasCapture(row, col, color):return Trueif checkForbidden(row, col, color):return Falseif hasSelfCapture(row, col, color):return Falsereturn True```5.判断棋盘空气、提子、禁手和自杀等规则:```def hasAir(row, col):if row > 0 and board[row-1][col] == 0:return Trueif row < GRID_NUM-1 and board[row+1][col] == 0:return Trueif col > 0 and board[row][col-1] == 0:return Trueif col < GRID_NUM-1 and board[row][col+1] == 0:return Truereturn Falsedef hasCapture(row, col, color):capture = Falsedirections = [(-1, 0), (1, 0), (0, -1), (0, 1)]for d in directions:r, c = row + d[0], col + d[1]if r < 0 or c < 0 or r >= GRID_NUM or c >= GRID_NUM or board[r][c] == color: continueif board[r][c] != 0 and not hasAir(r, c):for dr, dc in [(0, 1), (0, -1), (1, 0), (-1, 0)]:tr, tc = r+dr, c+dcif tr < 0 or tc < 0 or tr >= GRID_NUM or tc >= GRID_NUM:continueif board[tr][tc] == color:board[r][c] = 0capture = Truebreakreturn capturedef hasSelfCapture(row, col, color):board[row][col] = colorif hasAir(row, col):return Falsefor r in range(GRID_NUM):for c in range(GRID_NUM):if board[r][c] != color:continueif hasAir(r, c):return Falseif hasCapture(r, c, color):return Falsereturn Truedef checkForbidden(row, col, color):if not hasCapture(row, col, 3-color):return Falseif not hasAir(row, col):return Truereturn False```6.游戏主循环:```while True:mouseX, mouseY = pygame.mouse.get_pos()for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()elif event.type == MOUSEBUTTONDOWN:if event.button == 1:row, col = getRowCol((mouseX, mouseY)) if checkValid(row, col, turn):history.append([row, col])turn = 3 - turnelif event.button == 3 and len(history) > 0: x, y = history.pop()board[x][y] = 0turn = 3 - turnelif event.button == 4:sx = pygame.mouse.get_pos()[0]sy = pygame.mouse.get_pos()[1]board = loadGame(sx, sy)elif event.button == 5:sx = pygame.mouse.get_pos()[0]sy = pygame.mouse.get_pos()[1]saveGame(sx, sy)#绘制游戏界面DISPLAYSURF.fill(BG_COLOR)drawBoard()drawScore()drawTitle()pygame.display.update()fpsClock.tick(FPS)```7.保存、读取棋局进度:```def saveGame(sx, sy):fname = "game.sav"x = sx-20y = sy-20if x < 0 or y < 0 or x+350 > WIDTH or y+250 > HEIGHT:returnf = open(fname, "wb")pickle.dump(board, f)pickle.dump(turn, f)pickle.dump(history, f)f.close()font = pygame.font.Font(None, 24)label = font.render("Game saved successfully.", True, BLACK) DISPLAYSURF.blit(label, (x, y+30))pygame.display.update()def loadGame(sx, sy):fname = "game.sav"x = sx-20y = sy-20if x < 0 or y < 0 or x+350 > WIDTH or y+250 > HEIGHT:return boardif not os.path.isfile(fname):font = pygame.font.Font(None, 24)label = font.render("No saved game found.", True, BLACK) DISPLAYSURF.blit(label, (x, y+30))pygame.display.update()return boardf = open(fname, "rb")board = pickle.load(f)turn = pickle.load(f)history = pickle.load(f)f.close()font = pygame.font.Font(None, 24)label = font.render("Game loaded successfully.", True, BLACK)DISPLAYSURF.blit(label, (x, y+30))pygame.display.update()return board```四、总结通过本项目的完成,我们可以深入理解围棋规则及其实现方法,加深Python编程基础,掌握使用Pygame制作图像化游戏的方法。

围棋程序设计教案模板范文

围棋程序设计教案模板范文

课时安排:2课时教学目标:1. 让学生了解围棋程序设计的基本概念和原理。

2. 培养学生运用编程语言进行围棋程序设计的能力。

3. 提高学生的逻辑思维和问题解决能力。

教学重点:1. 围棋程序设计的基本概念和原理。

2. 编程语言在围棋程序设计中的应用。

教学难点:1. 编程语言在围棋程序设计中的实际应用。

2. 围棋程序设计中的算法优化。

教学准备:1. 计算机教室,每台计算机安装编程软件(如Python、Java等)。

2. 围棋基础知识教材。

3. 围棋程序设计相关案例。

教学过程:第一课时一、导入1. 教师简要介绍围棋的历史和文化,激发学生学习围棋程序设计的兴趣。

2. 提出问题:围棋程序设计有哪些应用场景?二、讲解围棋程序设计的基本概念1. 介绍围棋程序设计的基本概念,如棋盘、棋子、规则等。

2. 讲解围棋程序设计的基本原理,如算法、数据结构等。

三、编程语言在围棋程序设计中的应用1. 以Python为例,介绍编程语言在围棋程序设计中的应用。

2. 讲解Python在围棋程序设计中的优势,如语法简洁、易于学习等。

四、案例讲解1. 教师展示一个简单的围棋程序设计案例,让学生了解实际应用。

2. 分析案例中的算法和数据结构,让学生理解编程语言在围棋程序设计中的运用。

五、课堂练习1. 学生根据所学知识,尝试编写一个简单的围棋程序。

2. 教师巡回指导,解答学生在编程过程中遇到的问题。

第二课时一、复习上节课所学内容1. 复习围棋程序设计的基本概念和原理。

2. 复习编程语言在围棋程序设计中的应用。

二、讲解围棋程序设计中的算法优化1. 介绍围棋程序设计中常见的算法,如搜索算法、评估函数等。

2. 讲解如何优化算法,提高程序运行效率。

三、案例讲解1. 教师展示一个围棋程序设计中的算法优化案例。

2. 分析案例中的算法优化方法,让学生了解如何在编程过程中进行优化。

四、课堂练习1. 学生根据所学知识,尝试优化一个简单的围棋程序。

2. 教师巡回指导,解答学生在优化过程中遇到的问题。

Java实现五子棋游戏的完整代码

Java实现五子棋游戏的完整代码

Java实现五⼦棋游戏的完整代码⽤Java编写简单的五⼦棋,供⼤家参考,具体内容如下前⾔这两天在空闲时间做了个五⼦棋项⽬,分享给⼤家看⼀下,界⾯是这样的:界⾯很丑我知道,本⼈虽有⼏年PS基础,但知识浅薄,审美观不尽⼈意,做到如此实属极限(其实我懒得做了),⼤家将就着看看吧。

下⾯放出代码,为⽅便⼤家参考,我⼏乎每条代码都标有注释。

测试类代码public class Test {public static void main(String[] args) {MyJFrame mj=new MyJFrame();mj.myJFrame();}}MyJFrame类代码import javax.imageio.ImageIO;import javax.swing.*;import java.awt.*;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;public class MyJFrame extends JFrame implements MouseListener {int qx = 20, qy = 40, qw = 490, qh = 490;//棋盘位置、宽⾼int bw = 150, bh = 50, bx = 570, by = 150;//按钮宽⾼、位置int x = 0, y = 0;//保存棋⼦坐标int[][] SaveGame = new int[15][15];//保存每个棋⼦int qc = 1;//记录⽩棋=2,⿊棋=1int qn = 0;//判断棋⼦是否重复boolean canplay = true;//判断游戏是否开始和结束String go = "⿊⼦先⾏";//游戏信息//---------------------------------------------------------------------------------------------------------------------//窗体public void myJFrame() {this.setTitle("五⼦棋"); //标题this.setSize(800, 550); //窗⼝⼤⼩this.setResizable(false); //窗⼝是否可以改变⼤⼩=否this.setDefaultCloseOperation(MyJFrame.EXIT_ON_CLOSE);//窗⼝关闭⽅式为关闭窗⼝同时结束程序 int width = Toolkit.getDefaultToolkit().getScreenSize().width;//获取屏幕宽度int height = Toolkit.getDefaultToolkit().getScreenSize().height;//获取屏幕⾼度// System.out.println("宽度:"+width);//测试// System.out.println("⾼度:"+height);//测试this.setLocation((width - 800) / 2, (height - 600) / 2); //设置窗⼝默认位置以屏幕居中this.addMouseListener(this);this.setVisible(true); //窗⼝是否显⽰=是}//---------------------------------------------------------------------------------------------------------------------//覆写paint⽅法,绘制界⾯public void paint(Graphics g) {//双缓冲技术防⽌屏幕闪烁BufferedImage bi = new BufferedImage(800, 550, BufferedImage.TYPE_INT_ARGB);Graphics g2 = bi.createGraphics();//获取图⽚路径BufferedImage image = null;try {image = ImageIO.read(new File("D:/#Java/五⼦棋/tp/wzqbj.jpg"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 10, 10, this);//显⽰图⽚g2.setColor(Color.BLACK);//设置画笔颜⾊g2.setFont(new Font("华⽂⾏楷", 10, 50));//设置字体g2.drawString("晓时五⼦棋", 525, 100);//绘制字符//棋盘g2.setColor(Color.getHSBColor(30, (float) 0.10, (float) 0.90));//设置画笔颜⾊g2.fillRect(qx, qy, qw, qh);//绘制棋盘背景矩形//开始按钮g2.setColor(Color.WHITE);//设置画笔颜⾊g2.fillRect(bx, by, bw, bh);//绘制开始按钮g2.setFont(new Font("华⽂⾏楷", 10, 30));//设置字体g2.setColor(Color.black);//设置画笔颜⾊g2.drawString("开始", 615, 185);//绘制字符//悔棋按钮g2.setColor(Color.LIGHT_GRAY);//设置画笔颜⾊g2.fillRect(bx, by + 60, bw, bh);//绘制悔棋按钮g2.setFont(new Font("华⽂⾏楷", 10, 30));//设置字体g2.setColor(Color.WHITE);//设置画笔颜⾊g2.drawString("悔棋", 615, 245);//绘制字符//认输按钮g2.setColor(Color.GRAY);//设置画笔颜⾊g2.fillRect(bx, by + 120, bw, bh);//绘制认输按钮g2.setFont(new Font("华⽂⾏楷", 10, 30));//设置字体g2.setColor(Color.WHITE);//设置画笔颜⾊g2.drawString("认输", 615, 305);//绘制字符//游戏信息栏g2.setColor(Color.getHSBColor(30, (float) 0.10, (float) 0.90));//设置画笔颜⾊g2.fillRect(550, 350, 200, 150);//绘制游戏状态区域g2.setColor(Color.black);//设置画笔颜⾊g2.setFont(new Font("⿊体", 10, 20));//设置字体g2.drawString("游戏信息", 610, 380);//绘制字符g2.drawString(go, 610, 410);//绘制字符g2.drawString("作者:晓时⾕⾬", 560, 440);//绘制字符g2.drawString("联系⽅式:", 560, 465);//绘制字符g2.drawString("qq 717535996", 560, 490);//绘制字符g2.setColor(Color.BLACK);//设置画笔颜⾊//绘制棋盘格线for (int x = 0; x <= qw; x += 35) {g2.drawLine(qx, x + qy, qw + qx, x + qy);//绘制⼀条横线g2.drawLine(x + qx, qy, x + qx, qh + qy);//绘制⼀条竖线}//绘制标注点for (int i = 3; i <= 11; i += 4) {for (int y = 3; y <= 11; y += 4) {g2.fillOval(35 * i + qx - 3, 35 * y + qy - 3, 6, 6);//绘制实⼼圆}}//绘制棋⼦for (int i = 0; i < 15; i++) {for (int j = 0; j < 15; j++) {if (SaveGame[i][j] == 1)//⿊⼦{int sx = i * 35 + qx;int sy = j * 35 + qy;g2.setColor(Color.BLACK);g2.fillOval(sx - 13, sy - 13, 26, 26);//绘制实⼼圆}if (SaveGame[i][j] == 2)//⽩⼦{int sx = i * 35 + qx;int sy = j * 35 + qy;g2.setColor(Color.WHITE);g2.fillOval(sx - 13, sy - 13, 26, 26);//绘制实⼼圆g2.setColor(Color.BLACK);g2.drawOval(sx - 13, sy - 13, 26, 26);//绘制空⼼圆}}}g.drawImage(bi, 0, 0, this);// g.drawRect(20, 20, 20, 20);//绘制空⼼矩形}//--------------------------------------------------------------------------------------------------------------------- //判断输赢private boolean WinLose() {boolean flag = false;//输赢int count = 1;//相连数int color = SaveGame[x][y];//记录棋⼦颜⾊//判断横向棋⼦是否相连int i = 1;//迭代数while (color == SaveGame[x + i][y]) {count++;i++;}i = 1;//迭代数while (color == SaveGame[x - i][y]) {count++;i++;}if (count >= 5) {flag = true;}//判断纵向棋⼦是否相连count = 1;i = 1;//迭代数while (color == SaveGame[x][y + i]) {count++;i++;}i = 1;//迭代数while (color == SaveGame[x][y - i]) {count++;i++;}if (count >= 5) {flag = true;}//判断斜向棋⼦是否相连(左上右下)count = 1;i = 1;//迭代数while (color == SaveGame[x - i][y - i]) {count++;i++;}i = 1;//迭代数while (color == SaveGame[x + i][y + i]) {count++;i++;}if (count >= 5) {flag = true;}//判断斜向棋⼦是否相连(左下右上)count = 1;i = 1;//迭代数while (color == SaveGame[x + i][y - i]) {count++;i++;}i = 1;//迭代数while (color == SaveGame[x - i][y + i]) {count++;i++;}if (count >= 5) {flag = true;}return flag;}//--------------------------------------------------------------------------------------------------------------------- //初始化游戏public void Initialize() {//遍历并初始化数组for (int i = 0; i < 15; i++) {for (int j = 0; j < 15; j++) {SaveGame[i][j] = 0;}}//⿊⼦先⾏qc = 1;go = "轮到⿊⼦";}//--------------------------------------------------------------------------------------------------------------------- @Override//⿏标点击public void mouseClicked(MouseEvent e) {}@Override//⿏标按下public void mousePressed(MouseEvent e) {//获取⿏标点击位置x = e.getX();y = e.getY();//判断是否已开始游戏if (canplay == true) {//判断点击是否为棋盘内if (x > qx && x < qx + qw && y > qy && y < qy + qh) {//计算点击位置最近的点if ((x - qx) % 35 > 17) {x = (x - qx) / 35 + 1;} else {x = (x - qx) / 35;}if ((y - qy) % 35 > 17) {y = (y - qy) / 35 + 1;} else {y = (y - qy) / 35;}//判断当前位置有没有棋⼦if (SaveGame[x][y] == 0) {SaveGame[x][y] = qc;qn = 0;} else {qn = 1;}//切换棋⼦if (qn == 0) {if (qc == 1) {qc = 2;go = "轮到⽩⼦";} else {qc = 1;go = "轮到⿊⼦";}}this.repaint();//重新执⾏⼀次paint⽅法//弹出胜利对话框boolean wl = this.WinLose();if (wl) {JOptionPane.showMessageDialog(this, "游戏结束," + (SaveGame[x][y] == 1 ? "⿊⽅赢了" : "⽩⽅赢了"));//弹出提⽰对话框 canplay = false;}// System.out.println(1);//测试} else {// System.out.println(0);//测试}}//实现开始按钮//判断是否点击开始按钮if (e.getX() > bx && e.getX() < bx + bw && e.getY() > by && e.getY() < by + bh) {//判断游戏是否开始if (canplay == false) {//如果游戏结束,则开始游戏canplay = true;JOptionPane.showMessageDialog(this, "游戏开始");//初始化游戏Initialize();this.repaint();//重新执⾏⼀次paint⽅法} else {//如果游戏进⾏中,则重新开始JOptionPane.showMessageDialog(this, "重新开始");//初始化游戏Initialize();this.repaint();//重新执⾏⼀次paint⽅法}}//实现悔棋按钮//判断是否点击悔棋按钮if (e.getX() > bx && e.getX() < bx + bw && e.getY() > by + 60 && e.getY() < by + 60 + bh) {//判断游戏是否开始if (canplay == true) {//遍历棋盘上是否有棋⼦int z = 0;for (int i = 0; i < 15; i++) {for (int j = 0; j < 15; j++) {if (SaveGame[i][j] != 0) {z++;}}}//判断是否有棋⼦if (z != 0) {JOptionPane.showMessageDialog(this, "下棋亦如⼈⽣,你⾛的每⼀步都没有回头路。

我的JAVA五子棋小游戏代码

我的JAVA五子棋小游戏代码

import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.awt.Color;public class GoBang extends Applet implements ActionListener, MouseListener, MouseMotionListener, ItemListener {int color = 0;// 旗子的颜色标识0:白子1:黑子boolean isStart = false;// 游戏开始标志int bodyArray[][] = new int[16][16]; // 设置棋盘棋子状态0 无子1 白子2 黑子Button b1 = new Button("游戏开始");Button b2 = new Button("重置游戏");Label lblWin = new Label(" ");Checkbox ckbHB[] = new Checkbox[2];CheckboxGroup ckgHB = new CheckboxGroup();public void init() {setLayout(null);addMouseListener(this);add(b1);b1.setBounds(330, 50, 80, 30);b1.addActionListener(this);add(b2);b2.setBounds(330, 90, 80, 30);b2.addActionListener(this);ckbHB[0] = new Checkbox("白子先", ckgHB, false);ckbHB[0].setBounds(320, 20, 60, 30);ckbHB[1] = new Checkbox("黑子先", ckgHB, false);ckbHB[1].setBounds(380, 20, 60, 30);add(ckbHB[0]);add(ckbHB[1]);ckbHB[0].addItemListener(this);ckbHB[1].addItemListener(this);add(lblWin);lblWin.setBounds(330, 130, 80, 30);gameInit();this.resize(new Dimension(450,350));}public void itemStateChanged(ItemEvent e) {if (ckbHB[0].getState()) // 选择黑子先还是白子先{color = 0;} else {color= 1;}}public void actionPerformed(ActionEvent e) {if (e.getSource() == b1) {gameStart();} else {reStart();}}public void mousePressed(MouseEvent e) {}public void mouseClicked(MouseEvent e) {int x1, y1;x1 = e.getX();y1 = e.getY();if (e.getX() < 20 || e.getX() > 300 || e.getY() < 20 || e.getY() > 300) { return;}if (x1 % 20 > 10) {x1 += 20;}if (y1 % 20 > 10) {y1 += 20;}x1 = x1 / 20 * 20;y1 = y1 / 20 * 20;setDown(x1, y1);}public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }public void mouseReleased(MouseEvent e) { }public void mouseDragged(MouseEvent e) { }public void mouseMoved(MouseEvent e) { }public void paint(Graphics g) {g.setColor(Color.lightGray);g.fill3DRect(10, 10, 300, 300, true);g.setColor(Color.black);for (int i = 1; i < 16; i++) {g.drawLine(20, 20 * i, 300, 20 * i);g.drawLine(20 * i, 20, 20 * i, 300);}}public void setDown(int x, int y) // 落子{if (!isStart) // 判断游戏未开始{return;}if (bodyArray[x / 20][y / 20] != 0) { return;}Graphics g = getGraphics();if (color == 1)// 判断黑子还是白子{g.setColor(Color.black);color = 0;} else {g.setColor(Color.white);color = 1;}g.fillOval(x - 10, y - 10, 20, 20); bodyArray[x / 20][y / 20] = color + 1;if (gameWin1(x / 20, y / 20)) // 判断输赢{lblWin.setText(startColor(color) + "赢了!"); isStart = false;}if (gameWin2(x / 20, y / 20)) // 判断输赢{lblWin.setText(startColor(color) + "赢了!"); isStart = false;}if (gameWin3(x / 20, y / 20)) // 判断输赢{lblWin.setText(startColor(color) + "赢了!"); isStart = false;}if (gameWin4(x / 20, y / 20)) // 判断输赢{lblWin.setText(startColor(color) + "赢了!"); isStart = false;}}public String startColor(int x) {if (x == 0) {return "黑子";} else {return "白子";}}public void gameStart() // 游戏开始{isStart = true;enableGame(false);b2.setEnabled(true);}public void gameInit() // 游戏开始初始化{isStart = false;enableGame(true);b2.setEnabled(false);ckbHB[0].setState(true);for (int i = 0; i < 16; i++) {for (int j = 0; j < 16; j++) {bodyArray[i][j] = 0;}}lblWin.setText("");}public void reStart() // 游戏重新开始{repaint();gameInit();}public void enableGame(boolean e) // 设置组件状态{b1.setEnabled(e);b2.setEnabled(e);ckbHB[0].setEnabled(e);ckbHB[1].setEnabled(e);}public boolean gameWin1(int x, int y) // 判断输赢横{int x1, y1, t = 1;x1 = x;y1 = y;for (int i = 1; i < 5; i++) {if (x1 > 15) {break;}if (bodyArray[x1 + i][y1] == bodyArray[x][y]) {t += 1;} else {break;}}for (int i = 1; i < 5; i++) {if (x1 < 1) {break;}if (bodyArray[x1 - i][y1] == bodyArray[x][y]) {t += 1;} else {break;}}if (t > 4) {return true;} else {return false;}}public boolean gameWin2(int x, int y) // 判断输赢竖{int x1, y1, t = 1;x1 = x;y1 = y;for (int i = 1; i < 5; i++) {if (x1 > 15) {break;}if (bodyArray[x1][y1 + i] == bodyArray[x][y]) {t += 1;} else {break;}}for (int i = 1; i < 5; i++) {if (x1 < 1) {break;}if (bodyArray[x1][y1 - i] == bodyArray[x][y]) {t += 1;} else {break;}}if (t > 4) {return true;} else {return false;}}public boolean gameWin3(int x, int y) // 判断输赢左斜{int x1, y1, t = 1;x1 = x;y1 = y;for (int i = 1; i < 5; i++) {if (x1 > 15) {break;}if (bodyArray[x1 + i][y1 - i] == bodyArray[x][y]) {t += 1;} else {break;}}for (int i = 1; i < 5; i++) {if (x1 < 1) {break;}if (bodyArray[x1 - i][y1 + i] == bodyArray[x][y]) {t += 1;break;}}if (t > 4) {return true;} else {return false;}}public boolean gameWin4(int x, int y) // 判断输赢左斜{int x1, y1, t = 1;x1 = x;y1 = y;for (int i = 1; i < 5; i++) {if (x1 > 15) {break;}if (bodyArray[x1 + i][y1 + i] == bodyArray[x][y]) {t += 1;} else {break;}}for (int i = 1; i < 5; i++) {if (x1 < 1) {break;}if (bodyArray[x1 - i][y1 - i] == bodyArray[x][y]) {t += 1;} else {break;}}if (t > 4) {return true;return false; }}}。

java小程序源代码

java小程序源代码

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;class CalculatorPanel extends JPanel implements ActionListener{public CalculatorPanel(){setLayout(new BorderLayout());display=new JTextField("0");display.setEditable(false);add(display,"Center");ope=new JTextField(" ");ope.setEditable(false);add(ope,"West");//创建菜单栏(暂时无实际意义)JMenuBar bar=new JMenuBar();add(bar,"North");JMenu view=new JMenu("查看(V)");JMenu edit=new JMenu("编辑(E)");JMenu help=new JMenu("帮助(H)");bar.add(view);bar.add(edit);bar.add(help);JMenuItem newItem=new JMenuItem("标准型(V)");JMenuItem newItem2=new JMenuItem("科学型(S)");JMenuItem newItem3=new JMenuItem("退出(E)");JMenuItem newItem4=new JMenuItem("关于..");view.add(newItem);view.add(newItem2);view.add(newItem3);help.add(newItem4);newItem4.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(null,"本程序由射手同学独立完成,请任何时候保留此句!");}});newItem3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {int res;res=JOptionPane.showConfirmDialog(null, "确定退出?", "退出", JOptionPane.YES_NO_OPTION);if(res==JOptionPane.YES_OPTION) System.exit(0);}});JPanel p=new JPanel();p.setLayout(new GridLayout(4,4));String buttons="789/456*123-0.=+";for (int i=0;i<buttons.length();i++)addButton(p,buttons.substring(i,i+1));add(p,"South");}private void addButton(Container c,String s){JButton b=new JButton(s);// b.setSize()c.add(b);b.addActionListener(this);}public void actionPerformed(ActionEvent evt){String s=evt.getActionCommand();if ('0'<=s.charAt(0)&&s.charAt(0)<='9'){if(start)display.setText(s);else display.setText(display.getText()+s);start=false;}else//输入的是运算符,进行四则运算{double x=Double.parseDouble(display.getText());calculate(x);op=s;ope.setText(op);start=true;//重置文本框}}public void calculate(double n){if(op.equals("+")) arg+=n;else if (op.equals("-")) arg -=n;else if (op.equals("*")) arg*=n;else if (op.equals("/")) arg/=n;else if (op.equals("=")) arg=n;display.setText(""+arg);}//数据重置private boolean start=true;//是否是第一个输入private String op="=";//运算符private double arg=0;//运算结果private JTextField display;private JTextField ope;}class CalculatorFrame extends JFrame{public CalculatorFrame(){setTitle("Calculator");setLocation(500,200);setSize(200,200);setResizable(true);//关闭窗口事件响应,有两种方法setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 或者如下所示方法二// addWindowListener(new WindowAdapter()// {// public void windowClosing(WindowEvent e)// {// System.exit(0);// }//// });Container contentPane=getContentPane();contentPane.add(new CalculatorPanel());}}public class Calculator_2{ public static void main(String[] args) {JFrame frame=new CalculatorFrame(); frame.show();Calculator_2 a=new Calculator_2(); }}。

新学pygame写的围棋小程序源码

新学pygame写的围棋小程序源码

新学pygame写的围棋小程序源码# -*- coding: gbk -*-import sys,timeimport math,os,Imageimport pygame#15-2-11完成g_keg=[1,1,0,0,0,1,[[0,0,0,1200,650]],0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0]g_item=[1200,650,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] g_clor=[(255,255,255),(0,0,0),(0, 73, 156),(218, 255, 235),0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]g_file=["bai.png","hei.png","GmInfo.data","bai001.png","hei 001.png",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]gam_can=[g_file,g_clor,g_item,g_keg,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0]liebiao=[]qi_sum=[]qi_jian=[]if liebiao ==[]:passelse:if liebiao[-1][0]==gam_can[2][3]:gam_can[2][3]=(gam_can[2][3]+1)%2pygame.init()screen = pygame.display.set_mode((gam_can[2][0], gam_can[2][1]), 0, 32)screen.fill(gam_can[1][2])pygame.display.update()surface1=0#棋盘模块surface2=0#功能模块zz1=0zz2=0def make_qi(x):global zz1,zz2x=int(20*x)im = Image.open('hei.png') #打开图片img = im.resize((x,x), Image.ANTIALIAS)img.save('hei001.png')im = Image.open('bai.png') #打开图片img = im.resize((x,x), Image.ANTIALIAS)img.save('bai001.png')img = 0im=0zz1=pygame.image.load(g_file[3]).convert_alpha()zz2=pygame.image.load(g_file[4]).convert_alpha()make_qi(2)zz3=zz1zz4=zz2make_qi(1)def panduan(b,c):global liebiao,gam_can,surface1,qi_sum k=0for v in liebiao:if v[1]==b and v[2]==c:k=1breakif len(liebiao)==0:liebiao.append([gam_can[2][3],b,c]) gam_can[3][4]=gam_can[3][4]+1gam_can[2][3]=(gam_can[2][3]+1)%2 gam_can[3][5]=1k=1if k==0:liebiao.append([gam_can[2][3],b,c]) gam_can[3][5]=2c1=c-1zzz=[(gam_can[2][3]+1)%2]if sha_pan(zzz,b,c1)==0:sha_qi(zzz,b,c1,1)qi_sum=[]b1=b+1if sha_pan(zzz,b1,c)==0:sha_qi(zzz,b1,c,1)qi_sum=[]c1=c+1if sha_pan(zzz,b,c1)==0:sha_qi(zzz,b,c1,1)qi_sum=[]b1=b-1if sha_pan(zzz,b1,c)==0:sha_qi(zzz,b1,c,1)qi_sum=[]zzz=[gam_can[2][3]]if sha_pan(zzz,b,c)==0:if jing_qi(zzz,b,c,1):print u"不允许"else:gam_can[3][4]=gam_can[3][4]+1gam_can[2][3]=(gam_can[2][3]+1)%2def jing_qi(a,b,c,d):global qi_sum,qi_jian,liebiao,gam_cank = 0while qi_jian<>[]:x=qi_jian[0]if x[3]==1:k=sha_pan(qi_jian[0],qi_jian[0][1],qi_jian[0][2]-1) elif x[3]==2:k=sha_pan(qi_jian[0],qi_jian[0][1]+1,qi_jian[0][2]) elif x[3]==3:k=sha_pan(qi_jian[0],qi_jian[0][1],qi_jian[0][2]+1) elif x[3]==4:k=sha_pan(qi_jian[0],qi_jian[0][1]-1,qi_jian[0][2])if qi_jian[0][3]==4:qi_jian.pop(0)else:qi_jian[0][3]=qi_jian[0][3]+1if k==4:breakif k<>4:if len(qi_sum)==1:liebiao.pop(-1)return 1else:for xx in qi_sum:zp=0for yy in liebiao:if xx[1]==yy[1] and xx[2]==yy[2]: liebiao.pop(zp)breakelse:zp=zp+1gam_can[3][5]=1qi_sum=[]qi_jian=[]return 0def sha_pan(x,a,b):global qi_sum,qi_jian,liebiaok=0cc=0if a>=0 and a<19 and b>=0 and b<19: cc=1else:if cc:for v in liebiao:if v[1]==a and v[2]==b:if x[0]==v[0]:for ct in qi_sum:if ct[1]==v[1] and ct[2]==v[2]:return 3 #NO,以存在qi_sum.append([x[0],a,b,1])qi_jian.append([x[0],a,b,1])return 0 #可添加return 1#NO,颜色不一样return 4#NO,为空return 2#边界错误def sha_qi(a,b,c,d):global qi_sum,qi_jian,liebiao,gam_cank = 0while qi_jian<>[]:x=qi_jian[0]if x[3]==1:k=sha_pan(qi_jian[0],qi_jian[0][1],qi_jian[0][2]-1) elif x[3]==2:k=sha_pan(qi_jian[0],qi_jian[0][1]+1,qi_jian[0][2]) elif x[3]==3:k=sha_pan(qi_jian[0],qi_jian[0][1],qi_jian[0][2]+1) elif x[3]==4:k=sha_pan(qi_jian[0],qi_jian[0][1]-1,qi_jian[0][2]) if qi_jian[0][3]==4:qi_jian.pop(0)qi_jian[0][3]=qi_jian[0][3]+1if k==4:breakif k<>4:for xx in qi_sum:zp=0for yy in liebiao:if xx[1]==yy[1] and xx[2]==yy[2]:liebiao.pop(zp)breakelse:zp=zp+1gam_can[3][5]=1qi_sum=[]qi_jian=[]def zhi_ti(x,y,z,m,n,q,r=(210, 210, 210)):#长,宽,字体,大小,文字,背景颜色,字体颜色background = pygame.Surface((x,y)).convert()background.fill(q)text = pygame.font.SysFont(z,m)text.set_bold(1)text.set_italic(0)text=text.render(u'%s'%n,0, r)textpos = text.get_rect()textpos.center = background.get_rect().centerbackground.blit(text, textpos)return backgrounddef draw_lines(x,y,z):surface=pygame.Surface((y,z)).convert()surface.fill((0,0,0))return surfacedef draw_circles(x):surface=pygame.Surface((int(10*x),int(10*x))).convert()surface.fill((195, 203, 11))pygame.draw.circle(surface, ((0,0,0)), (int(5*x),int(5*x)),int(5*x))return surfacedef draw_rects(x):surface=pygame.Surface((int(520*x),int(520*x))).convert()surface.fill((195, 203, 11))pygame.draw.rect(surface, ((0,0,0)), (0,0,int(520*x),int(520*x)),1)return surfacedef hei_qi(surface,a,b):global gam_can,zz1,zz2if gam_can[3][5]==2:if liebiao[-1][0]==1:zz=zz1else:zz=zz2surface.blit(zz,(int((liebiao[-1][1]*30+6)*a),int((liebiao[-1][2]*30+6)*b)))else:for x in liebiao:if x[0]==1:zz=zz1else:zz=zz2surface.blit(zz,(int((x[1]*30+6)*a),int((x[2]*30+6)*b)))def qi_pan(x):global gam_can,liebiao,surface1if gam_can[3][5]==2:hei_qi(surface1,x,x)else:if gam_can[3][1]==x:passelse:gam_can[3][1]=xmake_qi(x)surface1=pygame.Surface((570*x,570*x)).convert() surface1.fill((195, 203, 11))hei=pygame.image.load(gam_can[0][0]).convert_alpha() bai=pygame.image.load(gam_can[0][1]).convert_alpha() v=100*xz=180*xfor xx in xrange(3):surface1.blit(draw_circles(x),(v,v+xx*z))surface1.blit(draw_circles(x),(v+1*z,v+xx*z))surface1.blit(draw_circles(x),(v+2*z,v+xx*z))z=30*xfor xx in xrange(19):surface1.blit(draw_lines(x,1,540*x),(15*x+z*xx,15*x))surface1.blit(draw_lines(x,540*x,1),(15*x,15*x+z*xx))hei_qi(surface1,x,x)return surface1def gong_neng(x):global gam_can,surface2,zz3,zz4surface2=pygame.Surface((400,650)).convert()surface2.fill(gam_can[1][3])if gam_can[2][3]==1:surface2.blit(zz3,(180,0))else:surface2.blit(zz4,(180,0))if x==3:surface2.blit(zhi_ti(100,50,"宋体",12,u"跳过此次",(23, 21, 237),(195, 203, 11)),(100,150))else:surface2.blit(zhi_ti(100,50,"宋体",12,u"跳过此次",(23, 21, 107),(195, 203, 11)),(100,150))return surface2def pan_mokuai(a,b):global g_kegk=0for x in g_keg[6]:if x[1]if x[2]k=x[0]return kdef game():global gam_canpos_y=50#棋盘初始行位置pos_x=50#棋盘初始列位置ls_x=0ls_y=0ls_x1=0ls_y1=0ls_x2=0ls_y2=0ls_mo=0sd=1.0ls_rightkey=0#判断右键是否正确点击gam_can[3][6].append([1,pos_x,pos_y,570,570]) gam_can[3][6].append([2,800,0,400,650])gam_can[3][6].append([3,900,150,100,50]) while gam_can[3][0]:for event in pygame.event.get():ls_x2, ls_y2=pygame.mouse.get_pos()ls_mo = pan_mokuai(ls_x2, ls_y2)if event.type==pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.MOUSEBUTTONDOWN: if ls_mo==1:if event.button==3:#右键按下ls_x, ls_y = pygame.mouse.get_pos()ls_rightkey=1passif ls_mo==3:if event.button==1:#右键按下gam_can[3][4]=gam_can[3][4]+1gam_can[2][3]=(gam_can[2][3]+1)%2passif event.type == pygame.MOUSEBUTTONUP:if ls_rightkey==1:if event.button==3:#右键提起ls_x1, ls_y1 = pygame.mouse.get_pos()if ls_x1==ls_x and ls_y1==ls_y:passelse:pos_x=pos_x+(ls_x1-ls_x)pos_y=pos_y+(ls_y1-ls_y)gam_can[3][5]=1ls_rightkey=0if ls_mo==1:if event.button==4 and sd<4.4:#上滑sd=sd+0.1gam_can[3][5]=1if event.button==5 and sd>1:#下滑sd=sd-0.1gam_can[3][5]=1if event.button==1:#左键按下ls_x, ls_y = pygame.mouse.get_pos()if ls_x > gam_can[3][2] and ls_x< gam_can[3][2]+570*gam_can[3][1]:if ls_y>gam_can[3][3] and ls_y<gam_can[3][3]+570*gam_can[3][1]:for xx in xrange(19):if ls_x > gam_can[3][2]+(5+30*xx)*gam_can[3][1] and ls_x< gam_can[3][2]+(25+30*xx)*gam_can[3][1]:for yy in xrange(19):if ls_y>gam_can[3][3]+(5+30*yy)*gam_can[3][1]and ls_y<gam_can[3][3]+(25+30*yy)*gam_can[3][1]:panduan(xx,yy)breakbreakgam_can[3][2]=pos_xgam_can[3][3]=pos_yif gam_can[3][5]:screen.fill(gam_can[1][2])screen.blit(qi_pan(sd),(pos_x,pos_y))gam_can[3][6][1]=[1,pos_x,pos_y,570*sd,570*sd]gam_can[3][5]=0screen.blit(gong_neng(ls_mo),(gam_can[3][6][2][1],gam_can[ 3][6][2][2]))pygame.display.update()if __name__=="__main__":while True:game()</gam_can[3][3]+(25+30*yy)*gam_can[3][1]:</gam_can[3][3]+570*gam_can[3][1]:。

java围棋课程设计

java围棋课程设计

java围棋课程设计一、课程目标知识目标:1. 理解Java编程语言的基本语法和结构;2. 掌握围棋的基本规则、术语及棋谱记录方法;3. 结合Java编程,实现一个简单的围棋游戏界面。

技能目标:1. 能够运用Java编程解决围棋游戏中遇到的问题,如判断胜负、统计棋子数量等;2. 培养学生运用面向对象编程思想进行程序设计,提高编程能力;3. 培养学生团队协作和沟通能力,通过合作完成围棋游戏项目。

情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养学习主动性和积极性;2. 培养学生勇于尝试、克服困难的精神,增强自信心;3. 培养学生遵守规则、公平竞争的道德观念,提升人际交往能力。

课程性质:本课程为选修课程,旨在让学生在学习Java编程的同时,了解和体验我国传统文化——围棋,培养学生编程兴趣和跨学科素养。

学生特点:学生处于中学阶段,具有一定的逻辑思维能力,对新鲜事物充满好奇,喜欢动手实践。

教学要求:结合学生特点,注重实践操作,以项目为导向,鼓励学生合作探究,培养学生编程技能和跨学科素养。

通过本课程的学习,使学生能够将Java编程与围棋相结合,实现具体的学习成果。

后续教学设计和评估将以此为基础,持续关注学生的学习进度和成果。

二、教学内容1. Java编程基础:涵盖数据类型、变量、运算符、控制流程、数组等基本概念,对应教材第1章至第4章内容。

2. 面向对象编程:介绍类、对象、继承、多态等概念,以教材第5章至第7章为基础,结合围棋游戏设计进行讲解。

3. 围棋基本知识:包括围棋起源、规则、术语、棋谱记录等,参考教材附录及相关章节。

4. 围棋游戏项目设计:a. 界面设计:实现一个简洁易用的围棋游戏界面,涵盖教材中界面设计相关内容;b. 逻辑设计:编写判断胜负、统计棋子数量等核心算法,对应教材中算法设计与实现部分;c. 数据存储:运用文件操作实现棋谱的保存和加载,涉及教材中文件读写章节。

5. 围棋游戏项目开发实践:按照教学大纲安排,分阶段完成项目开发,每个阶段涵盖相应教学内容。

围棋源代码-Java_Applet小程序

围棋源代码-Java_Applet小程序

围棋源代码-Java_Applet小程序核准通过,归档资料。

未经允许,请勿外传~心浪微博:朴恩俊丶熊猫核准通过,归档资料。

未经允许,请勿外传~核准通过,归档资料。

未经允许,请勿外传~/*一个Java围棋程序源代码*/import java.awt.*;import java.awt.event.*;import javax.swing.JOptionPane;public class Chess extends Frame{ChessPad chesspad= new ChessPad();Chess(){add(chesspad);chesspad.setBounds(70,90,440,440);Label label=new Label("click to point,doubled_click to remove,right click toback",Label.CENTER);add(label);label.setBounds(70,55,440,24);label.setBackground(Color.orange);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});setLayout(null);setVisible(true);setSize(600,550);}public static void main(String args[]){Chess chess=new Chess();}}class ChessPad extends Panel implements MouseListener, ActionListener,FocusListener{int x = -1, y = -1, chessColor = 1;String blackname="",whitename="";Button startbutton=new Button("restart"); Button inputButton=new Button("input"); TextField text_1=new TextField("black please"), text_2=new TextField(""),//white pleasetext_3=new TextField("black'name"),text_4=new TextField("white'name");ChessPad(){add(inputButton);inputButton.setBounds(35,5,60,26); inputButton.addActionListener(this); inputButton.addFocusListener(this);add(text_3);text_3.setBounds(115,5,90,24);text_3.addFocusListener(this);text_3.setEditable(true);add(text_4);text_4.setBounds(315,5,90,24);text_4.addFocusListener(this);text_4.setEditable(true);add(startbutton);startbutton.setBounds(35,36,60,26); startbutton.setEnabled(false);startbutton.addActionListener(this); add(text_1);text_1.setBounds(115,36,90,24);text_1.setEnabled(false);text_1.setEditable(false);add(text_2);text_2.setBounds(315,36,90,24);text_2.setEnabled(false);text_2.setEditable(false);setSize(440,440);setLayout(null);setBackground(Color.orange); addMouseListener(this);}public void paint(Graphics g){for(int i=80;i<=400;i=i+20){g.drawLine(40,i,400,i);}g.drawLine(40,420,400,420);for(int j=40;j<=380;j=j+20){g.drawLine(j,80,j,420);}g.drawLine(400,80,400,420);g.fillOval(97,137,6,6);g.fillOval(337,137,6,6);g.fillOval(97,377,6,6);g.fillOval(337,377,6,6);g.fillOval(217,257,6,6);}public void focusGained(FocusEvent e) {Component com=(Component)e.getSource(); if(com==text_3){text_3.setText("");}else if(com==text_4){text_4.setText("");}}public void focusLost(FocusEvent e) {}public void mousePressed(MouseEvent e){if(e.getModifiers()==InputEvent.BUTTON1_MASK){x = (int)e.getX();y = (int)e.getY();int a=(x+10)/20,b=(y+10)/20;ChessPoint_black chesspoint_black=new ChessPoint_black(this);ChessPoint_white chesspoint_white=new ChessPoint_white(this);if(x/20<2||y/20<4||x/20>19||y/20>20){}else{if(blackname.length()==0||whitename.length()==0){JOptionPane.showMessageDialog(this,"please input the player's name,and click inputbutton before you startchess!","reminder",JOptionPane.WARNING_MESSAGE);}else if(blackname.equals("black'name")){JOptionPane.showMessageDialog(this,"please input the black player's name,and click inputbutton","reminder",JOptionPane.WARNING_MESSAGE);}else if(whitename.equals("white'name")){JOptionPane.showMessageDialog(this,"please input the white player's name,and clickinput button","reminder",JOptionPane.WARNING_MESSAGE);}else{if(chessColor==1){this.add(chesspoint_black);chesspoint_black.setBounds(a*20-10,b*20-10,20,20);chessColor=chessColor*(-1);text_2.setText(this.whitename+" please");text_1.setText("");}else if(chessColor==-1){this.add(chesspoint_white);chesspoint_white.setBounds(a*20-10,b*20-10,20,20);chessColor=chessColor*(-1);text_1.setText(this.blackname+" please");text_2.setText("");}}}}}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e) {}public void actionPerformed(ActionEvent e) {if(e.getSource()==inputButton){blackname=text_3.getText().trim(); whitename=text_4.getText().trim();if(blackname.length()==0||whitename.length()==0){JOptionPane.showMessageDialog(this,"you did not complete the information or you haveinput the illegalcharacteristics!","reminder",JOptionPane.WARNING_MESSAGE);}else if(blackname.equals("black'name")){JOptionPane.showMessageDialog(this,"please input the black player's name","reminder",JOptionPane.WARNING_MESSAGE);}else if(whitename.equals("white'name")){JOptionPane.showMessageDialog(this,"please input the white player's name","reminder",JOptionPane.WARNING_MESSAGE);}else if(text_3.getText().equals(text_4.getText())){JOptionPane.showMessageDialog(this,"you have input the same name for two differentplayers, please reinput the playersname","reminder",JOptionPane.WARNING_MESSAGE);}else{inputButton.setEnabled(false);text_3.removeFocusListener(this); text_3.setEnabled(false);text_4.setEnabled(false); startbutton.setEnabled(true);text_1.setEnabled(true);text_1.setText(blackname+" please"); text_2.setEnabled(true);}}else if(e.getSource()==startbutton) {this.removeAll();inputButton.setEnabled(true);text_3.setEnabled(true);text_4.setEnabled(true); startbutton.setEnabled(false);text_1.setEnabled(false);text_2.setEnabled(false); chessColor=1;add(startbutton);startbutton.setBounds(35,36,60,26);add(text_1);text_1.setBounds(115,36,90,24);text_1.setText("black please");add(text_2);text_2.setBounds(315,36,90,24);text_2.setText("");add(inputButton);inputButton.setBounds(35,5,60,26);add(text_3);text_3.setText("black'name");text_3.addFocusListener(this);text_3.setBounds(115,5,90,24);add(text_4);text_4.setText("white'name");text_4.setBounds(315,5,90,24);blackname="";whitename="";}}}class ChessPoint_black extends Canvas implements MouseListener {ChessPad chesspad=null;ChessPoint_black(ChessPad p){setSize(20,20);chesspad=p;addMouseListener(this);}public void paint(Graphics g){g.setColor(Color.black);g.fillOval(0,0,20,20);}public void mousePressed(MouseEvent e){if(e.getModifiers()==InputEvent.BUTTON3_MASK){chesspad.remove(this);chesspad.chessColor=1;chesspad.text_2.setText("");chesspad.text_1.setText(chesspad.blackname+" please"); }}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){if(e.getClickCount()>=2){chesspad.remove(this);}}}class ChessPoint_white extends Canvas implements MouseListener {ChessPad chesspad=null;ChessPoint_white(ChessPad p){setSize(20,20);chesspad=p;addMouseListener(this);}public void paint(Graphics g){g.setColor(Color.white);g.fillOval(0,0,20,20);}public void mousePressed(MouseEvent e){if(e.getModifiers()==InputEvent.BUTTON3_MASK){chesspad.remove(this);chesspad.chessColor=-1;chesspad.text_1.setText("");chesspad.text_2.setText(chesspad.whitename+" please"); }}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){if(e.getClickCount()>=2) {chesspad.remove(this); }}}。

JAVA课程设计围棋对弈(含代码)

JAVA课程设计围棋对弈(含代码)

Java程序课程设计任务书一、主要任务与目标创建一个围棋对弈平台。

基于Panel类定义一个面板子类,在其中利用Graphics类的drawLine()方法绘制棋盘格线,利用fillOval()方法绘制棋盘四角的星位。

为面板注册MouseEvent监听器,为一个按钮注册ActionEvent事件监听器,实现单击鼠标布子、单机一个重新开局等操作。

黑白棋子基于Canvas类的子类,其中,paint()方法用来绘制棋子,通过为棋子注册MouseEvent事件监听器实现双击棋子吃子、右击棋子悔棋操作。

Canvas组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者从该区域捕获用户的输入事件。

必须重写paint方法,以便在Canvas上执行自定义图形。

主类为Frame的子类,前面创建的棋盘被置入其中。

二、主要内容与基本要求系统的功能要求:1.要求有黑白两色棋子,保存所有已下的棋子,包括在棋盘上的所有棋子和被踢掉的,若某一次落子没有造成踢子,包括所有被这个棋子提掉的棋子及这个棋子本身。

如果踢子,则保存所有被踢掉的棋子。

保证实现下棋的基本操作如:可以允许悔棋,落子,提示信息,重新开始游戏等功能。

2.熟悉JAVA中swing的组件运用,基本工具的熟练掌握。

学习并掌握以下技术:Java;熟练使用以下开发工具:JCreator 等三、计划进度1.12月28日--12月29日:搜集资料、查阅文献,确定选题2.12月29日--01月02日:需求分析,系统设计,系统功能模块完善3.01月02日-- 01月06 日:编程实现系统、系统测试与修改4.01月05日-- 01月07日:课程设计报告撰写5.01月07日--01月07日:课程设计报告答辩四、主要参考文献:[1].陈轶.姚晓昆编著.Java程序设计实验指导.北京:清华大学出版社,2006[2].[3].赵文靖编著.Java程序设计基础与上机指导.北京:清华大学出版社,2006[4].[5].吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社,2006[6].[7].陈国君等编著.Java2程序设计基础.北京:清华大学出版社,2006[8].[5].Java网络编程实例教程,清华大学出版社,冯博等,2005.1摘要围棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。

python实现围棋游戏(纯tkintergui)

python实现围棋游戏(纯tkintergui)

python实现围棋游戏(纯tkintergui)1. 开始前本程序基于tkinter⽣成GUI,使⽤前请确保已经安装好tkinter对于windows⽤户,您可能已经安装了tkinter,cmd中输⼊python -c 'import tkinter',如果没有出错则已安装tkinter对于linux⽤户,您可能未安装tkinter,使⽤包管理⼯具搜索tkinter,如:apt search tkinter,pacman -Ss tkinter,yum search tkinter,选择符合要求的软件包,然后安装,如果未找到,请⾃⾏下载并编译源代码,再安装。

2.完整代码#!/usr/bin/python3# 使⽤Python内置GUI模块tkinterfrom tkinter import *# ttk覆盖tkinter部分对象,ttk对tkinter进⾏了优化from tkinter.ttk import *# 深拷贝时需要⽤到copy模块import copyimport tkinter.messagebox# 围棋应⽤对象定义class Application(Tk):# 初始化棋盘,默认九路棋盘def __init__(self,my_mode_num=9):Tk.__init__(self)# 模式,九路棋:9,⼗三路棋:13,⼗九路棋:19self.mode_num=my_mode_num# 窗⼝尺⼨设置,默认:1.8self.size=1.8# 棋盘每格的边长self.dd=360*self.size/(self.mode_num-1)# 相对九路棋盘的矫正⽐例self.p=1 if self.mode_num==9 else (2/3 if self.mode_num==13 else 4/9)# 定义棋盘阵列,超过边界:-1,⽆⼦:0,⿊棋:1,⽩棋:2self.positions=[[0 for i in range(self.mode_num+2)] for i in range(self.mode_num+2)]# 初始化棋盘,所有超过边界的值置-1for m in range(self.mode_num+2):for n in range(self.mode_num+2):if (m*n==0 or m==self.mode_num+1 or n==self.mode_num+1):self.positions[m][n]=-1# 拷贝三份棋盘“快照”,悔棋和判断“打劫”时需要作参考st_3_positions=copy.deepcopy(self.positions)st_2_positions=copy.deepcopy(self.positions)st_1_positions=copy.deepcopy(self.positions)# 记录⿏标经过的地⽅,⽤于显⽰shadow时self.cross_last=None# 当前轮到的玩家,⿊:0,⽩:1,执⿊先⾏self.present=0# 初始停⽌运⾏,点击“开始游戏”运⾏游戏self.stop=True# 悔棋次数,次数⼤于0才可悔棋,初始置0(初始不能悔棋),悔棋后置0,下棋或弃⼿时恢复为1,以禁⽌连续悔棋self.regretchance=0# 图⽚资源,存放在当前⽬录下的/Pictures/中self.photoW=PhotoImage(file = "./Pictures/W.png")self.photoB=PhotoImage(file = "./Pictures/B.png")self.photoBD=PhotoImage(file = "./Pictures/"+"BD"+"-"+str(self.mode_num)+".png")self.photoWD=PhotoImage(file = "./Pictures/"+"WD"+"-"+str(self.mode_num)+".png")self.photoBU=PhotoImage(file = "./Pictures/"+"BU"+"-"+str(self.mode_num)+".png")self.photoWU=PhotoImage(file = "./Pictures/"+"WU"+"-"+str(self.mode_num)+".png")# ⽤于⿊⽩棋⼦图⽚切换的列表self.photoWBU_list=[self.photoBU,self.photoWU]self.photoWBD_list=[self.photoBD,self.photoWD]# 窗⼝⼤⼩self.geometry(str(int(600*self.size))+'x'+str(int(400*self.size)))# 画布控件,作为容器self.canvas_bottom=Canvas(self,bg='#369',bd=0,width=600*self.size,height=400*self.size)self.canvas_bottom.place(x=0,y=0)# ⼏个功能按钮self.startButton=Button(self,text='开始游戏',command=self.start)self.startButton.place(x=480*self.size,y=200*self.size)self.passmeButton=Button(self,text='弃⼀⼿',command=self.passme)self.passmeButton.place(x=480*self.size,y=225*self.size)self.regretButton=Button(self,text='悔棋',command=self.regret)self.regretButton.place(x=480*self.size,y=250*self.size)# 初始悔棋按钮禁⽤self.regretButton['state']=DISABLEDself.replayButton=Button(self,text='重新开始',command=self.reload)self.replayButton.place(x=480*self.size,y=275*self.size)self.newGameButton1=Button(self,text=('⼗三' if self.mode_num==9 else '九')+'路棋',command=self.newGame1)self.newGameButton1.place(x=480*self.size,y=300*self.size)self.newGameButton2=Button(self,text=('⼗三' if self.mode_num==19 else '⼗九')+'路棋',command=self.newGame2)self.newGameButton2.place(x=480*self.size,y=325*self.size)self.quitButton=Button(self,text='退出游戏',command=self.quit)self.quitButton.place(x=480*self.size,y=350*self.size)# 画棋盘,填充颜⾊self.canvas_bottom.create_rectangle(0*self.size,0*self.size,400*self.size,400*self.size,fill='#c51')# 刻画棋盘线及九个点# 先画外框粗线self.canvas_bottom.create_rectangle(20*self.size,20*self.size,380*self.size,380*self.size,width=3)# 棋盘上的九个定位点,以中点为模型,移动位置,以作出其余⼋个点for m in [-1,0,1]:for n in [-1,0,1]:self.oringinal=self.canvas_bottom.create_oval(200*self.size-self.size*2,200*self.size-self.size*2,200*self.size+self.size*2,200*self.size+self.size*2,fill='#000')self.canvas_bottom.move(self.oringinal,m*self.dd*(2 if self.mode_num==9 else (3 if self.mode_num==13 else 6)),n*self.dd*(2 if self.mode_num==9 else (3 if self.mode_num==13 else 6)))# 画中间的线条for i in range(1,self.mode_num-1):self.canvas_bottom.create_line(20*self.size,20*self.size+i*self.dd,380*self.size,20*self.size+i*self.dd,width=2)self.canvas_bottom.create_line(20*self.size+i*self.dd,20*self.size,20*self.size+i*self.dd,380*self.size,width=2)# 放置右侧初始图⽚self.pW=self.canvas_bottom.create_image(500*self.size+11, 65*self.size,image=self.photoW)self.pB=self.canvas_bottom.create_image(500*self.size-11, 65*self.size,image=self.photoB)# 每张图⽚都添加image标签,⽅便reload函数删除图⽚self.canvas_bottom.addtag_withtag('image',self.pW)self.canvas_bottom.addtag_withtag('image',self.pB)# ⿏标移动时,调⽤shadow函数,显⽰随⿏标移动的棋⼦self.canvas_bottom.bind('<Motion>',self.shadow)# ⿏标左键单击时,调⽤getdown函数,放下棋⼦self.canvas_bottom.bind('<Button-1>',self.getDown)# 设置退出快捷键<Ctrl>+<D>,快速退出游戏self.bind('<Control-KeyPress-d>',self.keyboardQuit)# 开始游戏函数,点击“开始游戏”时调⽤def start(self):# 删除右侧太极图self.canvas_bottom.delete(self.pW)self.canvas_bottom.delete(self.pB)# 利⽤右侧图案提⽰开始时谁先落⼦if self.present==0:self.create_pB()self.del_pW()else:self.create_pW()self.del_pB()# 开始标志,解除stopself.stop=None# 放弃⼀⼿函数,跳过落⼦环节def passme(self):# 悔棋恢复if not self.regretchance==1:self.regretchance+=1else:self.regretButton['state']=NORMAL# 拷贝棋盘状态,记录前三次棋局st_3_positions=copy.deepcopy(st_2_positions)st_2_positions=copy.deepcopy(st_1_positions)st_1_positions=copy.deepcopy(self.positions)self.canvas_bottom.delete('image_added_sign')# 轮到下⼀玩家if self.present==0:self.create_pW()self.del_pB()self.present=1else:self.create_pB()self.del_pW()self.present=0# 悔棋函数,可悔棋⼀回合,下两回合不可悔棋def regret(self):# 判定是否可以悔棋,以前第三盘棋局复原棋盘if self.regretchance==1:self.regretchance=0self.regretButton['state']=DISABLEDlist_of_b=[]list_of_w=[]self.canvas_bottom.delete('image')if self.present==0:self.create_pB()else:self.create_pW()for m in range(1,self.mode_num+1):for n in range(1,self.mode_num+1):self.positions[m][n]=0for m in range(len(st_3_positions)):for n in range(len(st_3_positions[m])):if st_3_positions[m][n]==1:list_of_b+=[[n,m]]elif st_3_positions[m][n]==2:list_of_w+=[[n,m]]self.recover(list_of_b,0)self.recover(list_of_w,1)st_1_positions=copy.deepcopy(st_3_positions)for m in range(1,self.mode_num+1):for n in range(1,self.mode_num+1):st_2_positions[m][n]=0st_3_positions[m][n]=0# 重新加载函数,删除图⽚,序列归零,设置⼀些初始参数,点击“重新开始”时调⽤def reload(self):if self.stop==1:self.stop=0self.canvas_bottom.delete('image')self.regretchance=0self.present=0self.create_pB()for m in range(1,self.mode_num+1):for n in range(1,self.mode_num+1):self.positions[m][n]=0st_3_positions[m][n]=0st_2_positions[m][n]=0st_1_positions[m][n]=0# 以下四个函数实现了右侧太极图的动态创建与删除def create_pW(self):self.pW=self.canvas_bottom.create_image(500*self.size+11, 65*self.size,image=self.photoW)self.canvas_bottom.addtag_withtag('image',self.pW)def create_pB(self):self.pB=self.canvas_bottom.create_image(500*self.size-11, 65*self.size,image=self.photoB)self.canvas_bottom.addtag_withtag('image',self.pB)def del_pW(self):self.canvas_bottom.delete(self.pW)def del_pB(self):self.canvas_bottom.delete(self.pB)# 显⽰⿏标移动下棋⼦的移动def shadow(self,event):if not self.stop:# 找到最近格点,在当前位置靠近的格点出显⽰棋⼦图⽚,并删除上⼀位置的棋⼦图⽚if (20*self.size<event.x<380*self.size) and (20*self.size<event.y<380*self.size):dx=(event.x-20*self.size)%self.dddy=(event.y-20*self.size)%self.ddself.cross=self.canvas_bottom.create_image(event.x-dx+round(dx/self.dd)*self.dd+22*self.p, event.y-dy+round(dy/self.dd)*self.dd-27*self.p,image=self.photoWBU_list[self.present])self.canvas_bottom.addtag_withtag('image',self.cross)if self.cross_last!=None:self.canvas_bottom.delete(self.cross_last)self.cross_last=self.cross# 落⼦,并驱动玩家的轮流下棋⾏为def getDown(self,event):if not self.stop:# 先找到最近格点if (20*self.size-self.dd*0.4<event.x<self.dd*0.4+380*self.size) and (20*self.size-self.dd*0.4<event.y<self.dd*0.4+380*self.size):dx=(event.x-20*self.size)%self.dddy=(event.y-20*self.size)%self.ddx=int((event.x-20*self.size-dx)/self.dd+round(dx/self.dd)+1)y=int((event.y-20*self.size-dy)/self.dd+round(dy/self.dd)+1)# 判断位置是否已经被占据if self.positions[y][x]==0:# 未被占据,则尝试占据,获得占据后能杀死的棋⼦列表self.positions[y][x]=self.present+1self.image_added=self.canvas_bottom.create_image(event.x-dx+round(dx/self.dd)*self.dd+4*self.p, event.y-dy+round(dy/self.dd)*self.dd-5*self.p,image=self.photoWBD_list[self.present]) self.canvas_bottom.addtag_withtag('image',self.image_added)# 棋⼦与位置标签绑定,⽅便“杀死”self.canvas_bottom.addtag_withtag('position'+str(x)+str(y),self.image_added)deadlist=self.get_deadlist(x,y)self.kill(deadlist)# 判断是否重复棋局if not st_2_positions==self.positions:# 判断是否属于有⽓和杀死对⽅其中之⼀if len(deadlist)>0 or self.if_dead([[x,y]],self.present+1,[x,y])==False:# 当不重复棋局,且属于有⽓和杀死对⽅其中之⼀时,落下棋⼦有效if not self.regretchance==1:self.regretchance+=1else:self.regretButton['state']=NORMALst_3_positions=copy.deepcopy(st_2_positions)st_2_positions=copy.deepcopy(st_1_positions)st_1_positions=copy.deepcopy(self.positions)# 删除上次的标记,重新创建标记self.canvas_bottom.delete('image_added_sign')self.image_added_sign=self.canvas_bottom.create_oval(event.x-dx+round(dx/self.dd)*self.dd+0.5*self.dd, event.y-dy+round(dy/self.dd)*self.dd+0.5*self.dd,event.x-dx+round(dx/self.dd)*self.dd-0.5*self.dd, event.y-dy+round(dy/self.dd)*self.dd-0.5*self.dd,w self.canvas_bottom.addtag_withtag('image',self.image_added_sign)self.canvas_bottom.addtag_withtag('image_added_sign',self.image_added_sign)if self.present==0:self.create_pW()self.del_pB()self.present=1else:self.create_pB()self.del_pW()self.present=0else:# 不属于杀死对⽅或有⽓,则判断为⽆⽓,警告并弹出警告框self.positions[y][x]=0self.canvas_bottom.delete('position'+str(x)+str(y))self.bell()self.showwarningbox('⽆⽓',"你被包围了!")else:# 重复棋局,警告打劫self.positions[y][x]=0self.canvas_bottom.delete('position'+str(x)+str(y))self.recover(deadlist,(1 if self.present==0 else 0))self.bell()self.showwarningbox("打劫","此路不通!")else:# 覆盖,声⾳警告self.bell()else:# 超出边界,声⾳警告self.bell()# 判断棋⼦(种类为yourChessman,位置为yourPosition)是否⽆⽓(死亡),有⽓则返回False,⽆⽓则返回⽆⽓棋⼦的列表# 本函数是游戏规则的关键,初始deadlist只包含了⾃⼰的位置,每次执⾏时,函数尝试寻找yourPosition周围有没有空的位置,有则结束,返回False代表有⽓;# 若找不到,则找⾃⼰四周的同类(不在deadlist中的)是否有⽓,即调⽤本函数,⽆⽓,则把该同类加⼊到deadlist,然后找下⼀个邻居,只要有⼀个有⽓,返回False代表有⽓;# 若四周没有⼀个有⽓的同类,返回deadlist,⾄此结束递归# def if_dead(self,deadlist,yourChessman,yourPosition):def if_dead(self,deadList,yourChessman,yourPosition):for i in [-1,1]:if [yourPosition[0]+i,yourPosition[1]] not in deadList:if self.positions[yourPosition[1]][yourPosition[0]+i]==0:return Falseif [yourPosition[0],yourPosition[1]+i] not in deadList:if self.positions[yourPosition[1]+i][yourPosition[0]]==0:return Falseif ([yourPosition[0]+1,yourPosition[1]] not in deadList) and (self.positions[yourPosition[1]][yourPosition[0]+1]==yourChessman):midvar=self.if_dead(deadList+[[yourPosition[0]+1,yourPosition[1]]],yourChessman,[yourPosition[0]+1,yourPosition[1]])if not midvar:return Falseelse:deadList+=copy.deepcopy(midvar)if ([yourPosition[0]-1,yourPosition[1]] not in deadList) and (self.positions[yourPosition[1]][yourPosition[0]-1]==yourChessman):midvar=self.if_dead(deadList+[[yourPosition[0]-1,yourPosition[1]]],yourChessman,[yourPosition[0]-1,yourPosition[1]])if not midvar:return Falseelse:deadList+=copy.deepcopy(midvar)if ([yourPosition[0],yourPosition[1]+1] not in deadList) and (self.positions[yourPosition[1]+1][yourPosition[0]]==yourChessman):midvar=self.if_dead(deadList+[[yourPosition[0],yourPosition[1]+1]],yourChessman,[yourPosition[0],yourPosition[1]+1])if not midvar:return Falseelse:deadList+=copy.deepcopy(midvar)if ([yourPosition[0],yourPosition[1]-1] not in deadList) and (self.positions[yourPosition[1]-1][yourPosition[0]]==yourChessman):midvar=self.if_dead(deadList+[[yourPosition[0],yourPosition[1]-1]],yourChessman,[yourPosition[0],yourPosition[1]-1])if not midvar:return Falseelse:deadList+=copy.deepcopy(midvar)return deadList# 警告消息框,接受标题和警告信息def showwarningbox(self,title,message):self.canvas_bottom.delete(self.cross)tkinter.messagebox.showwarning(title,message)# 落⼦后,依次判断四周是否有棋⼦被杀死,并返回死棋位置列表def get_deadlist(self,x,y):deadlist=[]for i in [-1,1]:if self.positions[y][x+i]==(2 if self.present==0 else 1) and ([x+i,y] not in deadlist):killList=self.if_dead([[x+i,y]],(2 if self.present==0 else 1),[x+i,y])if not killList==False:deadlist+=copy.deepcopy(killList)if self.positions[y+i][x]==(2 if self.present==0 else 1) and ([x,y+i] not in deadlist):killList=self.if_dead([[x,y+i]],(2 if self.present==0 else 1),[x,y+i])if not killList==False:deadlist+=copy.deepcopy(killList)return deadlist# 恢复位置列表list_to_recover为b_or_w指定的棋⼦def recover(self,list_to_recover,b_or_w):if len(list_to_recover)>0:for i in range(len(list_to_recover)):self.positions[list_to_recover[i][1]][list_to_recover[i][0]]=b_or_w+1self.image_added=self.canvas_bottom.create_image(20*self.size+(list_to_recover[i][0]-1)*self.dd+4*self.p, 20*self.size+(list_to_recover[i][1]-1)*self.dd-5*self.p,image=self.photoWBD_list[b_or_w])self.canvas_bottom.addtag_withtag('image',self.image_added)self.canvas_bottom.addtag_withtag('position'+str(list_to_recover[i][0])+str(list_to_recover[i][1]),self.image_added)# 杀死位置列表killList中的棋⼦,即删除图⽚,位置值置0def kill(self,killList):if len(killList)>0:for i in range(len(killList)):self.positions[killList[i][1]][killList[i][0]]=0self.canvas_bottom.delete('position'+str(killList[i][0])+str(killList[i][1]))# 键盘快捷键退出游戏def keyboardQuit(self,event):self.quit()# 以下两个函数修改全局变量值,newApp使主函数循环,以建⽴不同参数的对象def newGame1(self):global mode_num,newAppmode_num=(13 if self.mode_num==9 else 9)newApp=Trueself.quit()def newGame2(self):global mode_num,newAppmode_num=(13 if self.mode_num==19 else 19)newApp=Trueself.quit()# 声明全局变量,⽤于新建Application对象时切换成不同模式的游戏global mode_num,newAppmode_num=9newApp=Falseif __name__=='__main__':# 循环,直到不切换游戏模式while True:newApp=Falseapp=Application(mode_num)app.title('围棋')app.mainloop()if newApp:app.destroy()else:break3.运⾏效果以上就是python 实现围棋游戏的详细内容,更多关于python 围棋的资料请关注其它相关⽂章!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
text_4.setEnabled(true);
startbutton.setEnabled(false);
text_1.setEnabled(false);
text_2.setEnabled(false);
chessColor=1;
add(startbutton);
{
Component com=(Component)e.getSource();
if(com==text_3)
{
text_3.setText("");
}
else if(com==text_4)
{
text_4.setText("");
}
}
public void focusLost(FocusEvent e)
}
else if(blackname.equals("black'name"))
{
JOptionPane.showMessageDialog(this,"please input the black player's name,and click input button","reminder",JOptionPane.WARNING_MESSAGE);
{
int x = -1, y = -1, chessColor = 1;
String blackname="",whitename="";
Button startbutton=new Button("restart");
Button inputButton=new Button("input");
TextField text_1=new TextField("black please"),
}
else if(blackname.equals("black'name"))
{
JOptionPane.showMessageDialog(this,"please input the black player's name","reminder",JOptionPane.WARNING_MESSAGE);
{
}
public void mousePressed(MouseEvent e)
{
if(e.getModifiers()==InputEvent.BUTTON1_MASK)
{
x = (int)e.getX();
y = (int)e.getY();
int a=(x+10)/20,b=(y+10)/20;
{
ChessPad chesspad= new ChessPad();
Chess()
{
add(chesspad);
chesspad.setBounds(70,90,440,440);
Label label=new Label("click to point,doubled_click to remove,right click to back",Label.CENTER);
text_2.setEnabled(false);
text_2.setEditable(false);
setSize(440,440);
setLayout(null);
setBackground(Color.orange);
addMouseListener(this);
}
public void paint(Graphics g)
text_1.setText(blackname+" please");
text_2.setEnabled(true);
}
}
else if(e.getSource()==startbutton)
{
this.removeAll();
inputButton.setEnabled(true);
text_3.setEnabled(true);
{
for(int i=80;i<=400;i=i+20)
{
g.drawLine(40,i,400,i);
}
g.drawLine(40,420,400,420);
for(int j=40;j<=380;j=j+20)
{
g.drawLine(j,80,j,420);
}
g.drawLine(400,80,400,420);
text_2.setText("");
}
}
}
}
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{
System.exit(0);
}
}
);
setLayout(null);
setVisible(true);
setSize(600,550);
}
public static void main(String args[])
{
Chess chess=new Chess();
}
}
class ChessPad extends Panel implements MouseListener, ActionListener,FocusListener
}
else if(whitename.equals("white'name"))
{
JOptionPane.showMessageDialog(this,"please input the white player's name,and click input button","reminder",JOptionPane.WARNING_MESSAGE);
{
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==inputButton)
{
blackname=text_3.getText().trim();
whitename=text_4.getText().trim();
if(blackname.length()==0||whitename.length()==0)
text_1.setText("");
}
else if(chessColor==-1)
{
this.add(chesspoint_white);
chesspoint_white.setBounds(a*20-10,b*20-10,20,20);
chessColor=chessColor*(-1);
text_1.setText(this.blackname+" please");
add(label);
label.setBounds(70,55,440,24);
label.setBackground(Color.orange);
addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
}
else
{
inputButton.setEnabled(false);
text_3.removeFocusListener(this);
text_3.setEnabled(false);
text_4.setEnabled(false);
startbutton.setEnabled(true);
text_1.setEnabled(true);
g.fillOval(97,137,6,6);
g.fillOval(337,137,6,6);
g.fillOval(97,377,6,6);
g.fillOval(337,377,6,6);
g.fillOval(217,257,6,6);
}
public void focusGained(FocusEvent e)
add(text_4);
text_4.setBounds(315,5,90,24);
text_4.addFocusListener(this);
text_4.setEditable(true);
add(startbutton);
startbutton.setBounds(35,36,60,26);
startbutton.setEnabled(false);
startbutton.addActionListener(this);
add(text_1);
text_1.setBounds(115,36,90,24);
text_1.setEnabled(false);
text_1.setEditable(false);
add(text_2);
text_2.setBounds(315,36,90,24);
}
else if(whitename.equals("white'name"))
相关文档
最新文档