java课程设计五子棋游戏完整版汇编

沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。

当游戏结束的时候使用Graphics g调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。

3.设计结果与分析
(1)当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开始进行下棋,如果在游戏过程中出现什么问题可以单机再来一局重新开始游。

五子棋游戏的主界面如图2所示:
图2.程序主界面
(2)如果实黑棋先开始那么开始后的界面中先出的棋显示的是黑棋,如果是白棋先出则显示的是白棋,以黑棋为例如图3所示:
沈阳大学
图3.黑棋先出的界面图
(3)对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。

判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子,黑棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:
沈阳大学
图4.游戏结束界面
(4)白棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:
沈阳大学
图5.白棋胜利界面图
4.设计体会
通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。

同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。

在此感谢我的指导老师—原玥老师,她在课题的研究上不遗余力的给予指导。

她严谨的治学态度深深的影响了我,使我受益匪浅!
这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。

但可以肯定,这个课设题的要求绝对在我的能力范围以上。

之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。

结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。

尽管这个系统做的并不是那么的完善。

对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。

但是真正的要用Java 去做一个东西不理解它是不行的,而且其间这课设涉及到了Java 中的绝大多数的知识
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学。

合集下载

java五子棋课程设计

java五子棋课程设计

java五子棋课程设计一、课程目标知识目标:1. 学生能理解五子棋游戏的基本规则和胜负判断方法。

2. 学生掌握Java编程语言的基本语法,如变量声明、循环结构、条件判断等。

3. 学生能运用面向对象编程思想,设计五子棋游戏的相关类和对象。

技能目标:1. 学生能运用所学知识,独立编写五子棋游戏的代码,实现人机对战和胜负判断功能。

2. 学生通过编程实践,提高解决问题的能力和逻辑思维能力。

3. 学生能运用调试工具,优化代码,提高程序的执行效率和稳定性。

情感态度价值观目标:1. 学生在编程过程中,培养耐心、细心和团队合作精神。

2. 学生通过五子棋游戏,体验编程的乐趣,激发对计算机科学的兴趣和求知欲。

3. 学生在学习过程中,树立正确的竞争观念,学会尊重对手,公平竞争。

课程性质:本课程为实践性课程,注重培养学生的动手能力和编程思维。

学生特点:五年级学生,具备一定的计算机操作能力和逻辑思维能力,对编程有浓厚兴趣。

教学要求:结合学生特点,注重理论与实践相结合,以学生为主体,引导学生主动探究、合作学习,培养其编程素养。

将课程目标分解为具体的学习成果,以便在教学设计和评估中有的放矢。

二、教学内容1. 五子棋游戏规则及胜负判断方法介绍- 游戏规则讲解- 胜负判断方法分析2. Java基本语法复习- 数据类型与变量- 循环结构(for、while)- 条件判断(if-else、switch)3. 面向对象编程思想- 类与对象- 封装、继承、多态4. 五子棋游戏设计与实现- 游戏界面设计- 游戏逻辑实现(人机对战、胜负判断)- 代码编写与调试5. 教学内容的安排与进度- 第一节课:五子棋游戏规则介绍,Java基本语法复习- 第二节课:面向对象编程思想学习,五子棋游戏设计思路分析- 第三节课:五子棋游戏代码编写与调试,实现人机对战和胜负判断功能6. 教材章节及内容关联- 第五章:面向对象编程- 第六章:数组与字符串- 第七章:异常处理与调试技巧教学内容依据课程目标进行选择和组织,保证科学性和系统性。

java五子棋毕业设计整套

java五子棋毕业设计整套

1引言随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。

如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。

网络五子棋游戏是使用Java语言开发的一款游戏。

它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的APPLET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。

通过对该软件的编写,还可以巩固学生对以上各种知识的掌握和理解。

2 JAVA语言概述2.1 JAVA简介JAVA是Sun Microsystem公司开发的编程语言,是一个简单,面向对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言。

2.1.1 JAVA的基本特点(1) 简单性Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。

Java实现了自动的垃圾收集,简化了内存管理的工作。

(2) 面向对象Java提供了简单的类机制和动态的构架模型。

对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。

(3) 多线程多线程使应用程序可以同时进行不同的操作,处理不同的事件。

在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。

(4) 分布性Java是面向网络的语言。

通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。

(5) 体系结构中立Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。

五子棋游戏_java课设_含可运行程序

五子棋游戏_java课设_含可运行程序

沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
图2 界面修剪图
沈阳大学
图3 游戏说明图
图4 游戏关于图
运行游戏后,正式的对战可以有时间设定,点击设置游戏时间,出现对话框这时你可以输入你想要设定的时间,该时间是按分钟设置的,会出现如图3所示:
沈阳大学
图4 游戏设置确定图
当点击确定后,双方就可以进行对战了,当轮到一方时,该方的设定时间就会走动,而另一方就会停止。

如图5所示:
图5 游戏对战图
如果这场游戏时间超时,或者一方中途认输的,就可以提示出单击认输的按钮,这样就可以结束游戏啦!如图6所示:
沈阳大学
图7 游戏结束图
设计体会
通过编写这个程序,我体会最为深刻的一点是五子棋游戏的整体结构的设计和
程序流程设计模式的重要性。

即使是对于这一个并不大的程序,代码的组织都觉得变得非常重要,因为这关系到日后的运行维护以及扩展。

这个游戏之中,有关程序的实现以及对五子棋界面的设计有大量的方法,而且大都都相似,但是对于整个程序的架构,却只有亲身去实践后才可以知道各个模块是怎样衔接和联系的。

几千上万行的代码需要通
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学。

java课程设计报告_五子棋

java课程设计报告_五子棋

目录第一章软件平台……………………………游戏设计思路…………………………第二章小游戏五子棋的开发过程………………第一节JAVA基础知识………………………第二节启动程序的分析……………………第三节游戏设计过程………………………第三章总结…………………………………………第四章参考文献……………………………………第五章附录…………………………………………第一章游戏设计思路:第二章第一节java程序基础知识本系统有4个程序每个程序都导入了不同的包和类运用了不同的所学知识。

不同的类和包提供的方法、类型等都不同,本程序还使用了继承。

以至使其能够完成不同的功能。

本节主要讲述本系统所使用的基础知识。

1、类的基础<1、类的定义JAVA中的类实质上是一种对象类型,它是对具有相同属性和相同行为对象的一种抽象。

类是java程序中最小的组成单位。

<2、Java中类定义的格式为:[类修饰符] class 类名[extends 基类] [implements 接口]{// 成员变量声明(Member variable declaration)// 成员方法声明(Member method declaration)}其中,class、extends和implements都是Java的关键字。

类修饰符、extends和implements是关于修饰符、继承和接口的内容。

2、继承继承性是面向对象程序设计语言的一个重要特征,通过继承可以实现代码的复用。

Java语言中,所有的类都是直接或间接的继承ng.object类而得到的。

被继承的类称为基类或父类,继承而的来的类成为子类。

子类继承基类的方法和属性,同时也可以修改基类的方法和属性,并增加自己新的属性和方法。

Java不支持多重继承。

即一个子类不能拥有两个或以上的父类。

3、包<1、包的定义在Java中,把相关的代码组织到一起,称为“包”。

包市一种将相关类、接口或其他包组织起来的集合体,目的是为了将包含类代码的文件组织起来,易于查找和使用。

Java语言程序设计的课程设计项目——利用Java实现人机五子棋游戏项目完整实现实例(第1部分)

Java语言程序设计的课程设计项目——利用Java实现人机五子棋游戏项目完整实现实例(第1部分)

1.1Java语言程序设计的课程设计项目——利用Java实现人机五子棋游戏项目完整实现实例(第1部分)1.1.1项目预演1、新建一个Java项目,名称为BackGammonGame五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。

容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

2、切换到Navigator视图3、拷贝程序和图像文件4、执行启动程序5、最后出现下面的程序启动画面6、主程序窗口开始游戏时游戏界面是没有棋子ide,也就是棋盘的初始化状态。

传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为15×15,棋子放置于棋盘线交叉点上。

两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。

如何判断输赢:当某方下一子后,计算与当前棋子相邻的四个方向(\ 、/、|和—)的同色棋子的各数,大于四则分出胜负,否则继续下子过程。

1.1.2项目中的各个模块说明1、人机五子棋游戏启动程序类BackGammonGameApp(1)类名称为BackGammonGameApp,包名称为com.px1987.backgammongame(2)程序的主要流程1)系统初始化2)主循环控制模块3)玩家下子4)盘面分析填写棋型表5)电脑下子6)胜负判断(3)主控制程序BackGammonGameApp代码实例package com.px1987.backgammongame;import javax.swing.SwingUtilities;import com.px1987.backgammongame.mainframe.BackGammonGameMainFrame;import com.px1987.backgammongame.splashframe.SplashImageJWindow;import com.px1987.backgammongame.util.BackGammonGameUtils;public class BackGammonGameApp {public BackGammonGameApp() {}public static void main(String[] args){SplashImageJWindow oneSplashImageJWindow=new SplashImageJWindow();BackGammonGameUtils.systemInitAndLoadResource(oneSplashImageJWindow);oneSplashImageJWindow.dispose(); //系统后台初始化完毕,则关闭快闪屏窗口并释放该窗体的资源oneSplashImageJWindow=null;SwingUtilities.invokeLater(new Runnable() { //下面的代码实现实时刷新Swing界面public void run() {BackGammonGameMainFrame backGammonGameMainFrame=new BackGammonGameMainFrame();backGammonGameMainFrame.setVisible(true);}});}}2、人机五子棋游戏全局工具类BackGammonGameUtils(1)类名称为BackGammonGameUtils,包名称为com.px1987.backgammongame.util 工具类的主要作用?类中的方法有声明要求?(2)systemInitAndLoadResource()方法实现系统初始化后台加载主线程是在程序启动时自动创建的,但它可以由一个Thread对象控制。

java课程设计五子棋游戏完整版

java课程设计五子棋游戏完整版

沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。

当游戏结束的时候使用Graphics g调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。

3.设计结果与分析(1)当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开始进行下棋,如果在游戏过程中出现什么问题可以单机再来一局重新开始游。

五子棋游戏的主界面如图2所示:图2.程序主界面(2)如果实黑棋先开始那么开始后的界面中先出的棋显示的是黑棋,如果是白棋先出则显示的是白棋,以黑棋为例如图3所示:沈阳大学图3.黑棋先出的界面图(3)对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。

判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子,黑棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图4.游戏结束界面(4)白棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图5.白棋胜利界面图4.设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。

同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。

在此感谢我的指导老师—原玥老师,她在课题的研究上不遗余力的给予指导。

她严谨的治学态度深深的影响了我,使我受益匪浅!这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。

但可以肯定,这个课设题的要求绝对在我的能力范围以上。

之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。

结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。

JAVA课程设计 五子棋(内附完整代码)

JAVA课程设计设计题目:五子棋游戏一.简要的介绍五子棋1.五子棋的起源五子棋,又被称为“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”。

五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。

有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。

2.现在五子棋标准棋盘(如图所示)3.五子棋的棋子五子棋采用两种颜色棋子,黑色棋子和白色棋子,和围棋相同,4.五子棋规则五子棋就是五个棋子连在一起就算赢,黑棋先行,下棋下在棋盘交叉线上,由于黑棋先行,优势太大,所以对黑棋设了禁手,又规定了“三手交换”,就是黑棋下第 2 手棋,盘面第 3 着棋之后,白方在应白 2 之前,如感觉黑方棋形不利于己方,可出交换,即执白棋一方变为执黑棋一方。

和“五手两打法”,就是黑棋在下盘面上关键的第 5 手时,必须下两步棋,让白方在这两步棋中任选一步,然后再续下。

不过一般爱好者不需要遵循这么多规则。

二.程序流程三.代码设计与分析main方法创建了ChessFrame类的一个实例对象(cf),并启动屏幕显示显示该实例对象。

public class FiveChessAppletDemo {public static void main(String args[]){ChessFrame cf = new ChessFrame();cf.show();}}用类ChessFrame创建五子棋游戏主窗体和菜单import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessFrame extends JFrame implements ActionListener { private String[] strsize={"标准棋盘","改进棋盘","扩大棋盘"}; private String[] strmode={"人机对战","人人对战"};public static boolean iscomputer=true,checkcomputer=true; private int width,height;private ChessModel cm;private MainPanel mp;构造五子棋游戏的主窗体public ChessFrame() {this.setTitle("五子棋游戏");cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,"Center");this.setResizable(false);this.addWindowListener(new ChessWindowEvent());MapSize(14,14);JMenuBar mbar = new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu = new JMenu("游戏");mbar.add(makeMenu(gameMenu, new Object[] {"开局", null,"棋盘",null,"模式", null, "退出"}, this));JMenu lookMenu =new JMenu("外观");mbar.add(makeMenu(lookMenu,new Object[] {"类型一","类型二","类型三"},this));JMenu helpMenu = new JMenu("版本");mbar.add(makeMenu(helpMenu, new Object[] {"关于"}, this));}构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items[], Object target){ JMenu m = null;if(parent instanceof JMenu)m = (JMenu)parent;else if(parent instanceof String)m = new JMenu((String)parent);elsereturn null;for(int i = 0; i < items.length; i++)if(items[i] == null)m.addSeparator();else if(items[i] == "棋盘"){JMenu jm = new JMenu("棋盘");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int j=0;j<strsize.length;j++){rmenu=makeRadioButtonMenuItem(strsize[j],target);if (j==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}else if(items[i] == "模式"){JMenu jm = new JMenu("模式");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int h=0;h<strmode.length;h++){rmenu=makeRadioButtonMenuItem(strmode[h],target);if(h==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}elsem.add(makeMenuItem(items[i], target));return m;}构造五子棋游戏的菜单项public JMenuItem makeMenuItem(Object item, Object target){ JMenuItem r = null;if(item instanceof String)r = new JMenuItem((String)item);else if(item instanceof JMenuItem)r = (JMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}构造五子棋游戏的单选按钮式菜单项public JRadioButtonMenuItem makeRadioButtonMenuItem(Object item, Object target){JRadioButtonMenuItem r = null;if(item instanceof String)r = new JRadioButtonMenuItem((String)item);else if(item instanceof JRadioButtonMenuItem)r = (JRadioButtonMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}public void MapSize(int w,int h){setSize(w * 24, h * 27);if(this.checkcomputer)this.iscomputer=true;elsethis.iscomputer=false;mp.setModel(cm);mp.repaint();}public boolean getiscomputer(){return this.iscomputer;}public void restart(){int modeChess = cm.getModeChess();if(modeChess <= 3 && modeChess >= 0){cm = new ChessModel(modeChess);MapSize(cm.getWidth(),cm.getHeight());}}public void actionPerformed(ActionEvent e){String arg=e.getActionCommand();try{if (arg.equals("类型三"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");else if(arg.equals("类型二"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");elseUIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel" );SwingUtilities.updateComponentTreeUI(this);}catch(Exception ee){}if(arg.equals("标准棋盘")){this.width=14;this.height=14;cm=new ChessModel(1);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("改进棋盘")){this.width=18;this.height=18;cm=new ChessModel(2);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("扩大棋盘")){this.width=22;this.height=22;cm=new ChessModel(3);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人机对战")){this.checkcomputer=true;this.iscomputer=true;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人人对战")){this.checkcomputer=false;this.iscomputer=false;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("开局")){restart();}if(arg.equals("关于"))JOptionPane.showMessageDialog(null, "第一版", "版本",JOptionPane.PLAIN_MESSAGE );if(arg.equals("退出"))System.exit(0);}}用类ChessModel实现了整个五子棋程序算法的核心import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessModel {规定棋盘的宽度、高度、棋盘的模式private int width,height,modeChess;规定棋盘方格的横向、纵向坐标private int x=0,y=0;棋盘方格的横向、纵向坐标所对应的棋子颜色,数组arrMapShow只有3个值:1,2,3,-1,其中1代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1代表该棋盘方格不能够下棋子private int[][] arrMapShow;交换棋手的标识,棋盘方格上是否有棋子的标识符private boolean isOdd,isExist;public ChessModel() {}该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘public ChessModel(int modeChess){this.isOdd=true;if(modeChess == 1){PanelInit(14, 14, modeChess);}if(modeChess == 2){PanelInit(18, 18, modeChess);}if(modeChess == 3){PanelInit(22, 22, modeChess);}}按照棋盘模式构建棋盘大小private void PanelInit(int width, int height, int modeChess){ this.width = width;this.height = height;this.modeChess = modeChess;arrMapShow = new int[width+1][height+1];for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){arrMapShow[i][j] = -1;}}}获取是否交换棋手的标识符public boolean getisOdd(){return this.isOdd;}设置交换棋手的标识符public void setisOdd(boolean isodd){ if(isodd)this.isOdd=true;elsethis.isOdd=false;}获取某棋盘方格是否有棋子的标识值public boolean getisExist(){return this.isExist;}获取棋盘宽度public int getWidth(){return this.width;}获取棋盘高度public int getHeight(){return this.height;}获取棋盘模式public int getModeChess(){return this.modeChess;}获取棋盘方格上棋子的信息public int[][] getarrMapShow(){return arrMapShow;}判断下子的横向、纵向坐标是否越界private boolean badxy(int x, int y){if(x >= width+20 || x < 0)return true;return y >= height+20 || y < 0;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public boolean chessExist(int i,int j){if(this.arrMapShow[i][j]==1 || this.arrMapShow[i][j]==2)return true;return false;}判断该坐标位置是否可下棋子public void readyplay(int x,int y){if(badxy(x,y))return;if (chessExist(x,y))return;this.arrMapShow[x][y]=3;}在该坐标位置下棋子public void play(int x,int y){if(badxy(x,y))return;if(chessExist(x,y)){this.isExist=true;return;}elsethis.isExist=false;if(getisOdd()){setisOdd(false);this.arrMapShow[x][y]=1;}else{setisOdd(true);this.arrMapShow[x][y]=2;}}计算机走棋说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数,最后得出棋子数最大值的坐标,下子public void computerDo(int width,int height){int max_black,max_white,max_temp,max=0;setisOdd(true);System.out.println("计算机走棋 ...");for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){算法判断是否下子if(!chessExist(i,j)){判断白子的最大值max_white=checkMax(i,j,2);判断黑子的最大值max_black=checkMax(i,j,1);max_temp=Math.max(max_white,max_black);if(max_temp>max){max=max_temp;this.x=i;this.y=j;}}}}setX(this.x);setY(this.y);this.arrMapShow[this.x][this.y]=2;}记录电脑下子后的横向坐标public void setX(int x){this.x=x;}记录电脑下子后的纵向坐标public void setY(int y){this.y=y;}获取电脑下子的横向坐标public int getX(){return this.x;}获取电脑下子的纵向坐标public int getY(){return this.y;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public int checkMax(int x, int y,int black_or_white){ int num=0,max_num,max_temp=0;int x_temp=x,y_temp=y;int x_temp1=x_temp,y_temp1=y_temp;判断右边for(int i=1;i<5;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)num++;elsebreak;}判断左边x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;if(x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num<5)max_temp=num;判断上面x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断下面y_temp1=y_temp;for(int i=1;i<5;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断左上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1-=1;y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断右下方x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<5;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断右上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断左下方x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;max_num=max_temp;return max_num;}判断胜负public boolean judgeSuccess(int x,int y,boolean isodd){ int num=1;int arrvalue;int x_temp=x,y_temp=y;if(isodd)arrvalue=2;elsearrvalue=1;int x_temp1=x_temp,y_temp1=y_temp;判断右边胜负for(int i=1;i<6;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}判断左边胜负x_temp1=x_temp;for(int i=1;i<6;i++){x_temp1-=1;break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断上方胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断下方胜负y_temp1=y_temp;for(int i=1;i<6;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断左上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断右下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断右上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断左下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}if(num==5)return true;return false;}赢棋后的提示public void showSuccess(JPanel jp){JOptionPane.showMessageDialog(jp,"你赢了","结果",RMATION_MESSAGE);}输棋后的提示public void showDefeat(JPanel jp){JOptionPane.showMessageDialog(jp,"你输了","结果",RMATION_MESSAGE);}}用类MainPanel主要完成如下功能:1、构建一个面板,在该面板上画上棋盘;2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class MainPanel extends JPanelimplements MouseListener,MouseMotionListener{设定棋盘的宽度和高度private int width,height;private ChessModel cm;根据棋盘模式设定面板的大小MainPanel(ChessModel mm){cm=mm;width=cm.getWidth();height=cm.getHeight();addMouseListener(this);}根据棋盘模式设定棋盘的宽度和高度public void setModel(ChessModel mm){cm = mm;width = cm.getWidth();height = cm.getHeight();}根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子public void paintComponent(Graphics g){super.paintComponent(g);for(int j = 0; j <= height; j++){for(int i = 0; i <= width; i++){int v = cm.getarrMapShow()[i][j];draw(g, i, j, v);}}}根据提供的棋子信息(颜色、坐标)画棋子public void draw(Graphics g, int i, int j, int v){ int x = 20 * i+20;int y = 20 * j+20;画棋盘if(i!=width && j!=height){g.setColor(Color.darkGray);g.drawRect(x,y,20,20);}画黑色棋子if(v == 1 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.black);g.fillOval(x-8,y-8,16,16);}画白色棋子if(v == 2 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.white);g.fillOval(x-8,y-8,16,16);}if(v ==3){g.setColor(Color.cyan);g.drawOval(x-8,y-8,16,16);}}响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负等public void mousePressed(MouseEvent evt){int x = (evt.getX()-10) / 20;int y = (evt.getY()-10) / 20;System.out.println(x+" "+y);if (evt.getModifiers()==MouseEvent.BUTTON1_MASK){cm.play(x,y);System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()[x][y]); repaint();if(cm.judgeSuccess(x,y,cm.getisOdd())){cm.showSuccess(this);evt.consume();ChessFrame.iscomputer=false;}判断是否为人机对弈if(ChessFrame.iscomputer&&!cm.getisExist()){puterDo(cm.getWidth(),cm.getHeight());repaint();if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd())){ cm.showDefeat(this);evt.consume();}}}}public void mouseClicked(MouseEvent evt){}public void mouseReleased(MouseEvent evt){}public void mouseEntered(MouseEvent mouseevt){}public void mouseExited(MouseEvent mouseevent){}public void mouseDragged(MouseEvent evt){}响应鼠标的拖动事件public void mouseMoved(MouseEvent moveevt){int x = (moveevt.getX()-10) / 20;int y = (moveevt.getY()-10) / 20;cm.readyplay(x,y);repaint();}}import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;响应退出窗口class ChessWindowEvent extends WindowAdapter{public void windowClosing(WindowEvent e){System.exit(0);}ChessWindowEvent(){}}四.程序调试与运行运行:标准棋盘改进棋盘:扩大棋盘:外观类型二:外观类型三:人机对战:结果:五.结论通过对五子棋游戏的编写,使自己对java语言有了更深的了解。

java课程设计五子棋

下面的原始码分为4个文件;chessclient.java:客户端主程式。

chessinterface.java:客户端的界面。

chesspad.java:棋盘的绘制。

chessserver.java:服务器端。

可同时容纳50个人同时在线下棋,聊天。

没有加上周详注释,不过绝对能运行,j2sdk1.4下通过。

/****************************************************************** ***************************1.chessclient.java******************************************************************* ***************************/import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.util.*;class clientthread extends thread{chessclient chessclient;clientthread(chessclient chessclient){this.chessclient=chessclient;}public void acceptmessage(string recmessage){if(recmessage.startswith("/userlist ")){stringtokenizer usertoken=new stringtokenizer(recmessage," "); int usernumber=0;erlist.removeall();erchoice.removeall();erchoice.additem("所有人");while(usertoken.hasmoretokens()){string user=(string)usertoken.nexttoken(" ");if(usernumber>0 && !user.startswith("[inchess]")){erlist.add(user);erchoice.additem(user);}usernumber++;}erchoice.select("所有人");}else if(recmessage.startswith("/yourname ")){chessclient.chessclientname=recmessage.substring(10);chessclient.settitle("java五子棋客户端 "+"用户名:"+chessclient.chessclientname);}else if(recmessage.equals("/reject")){try{chessclient.chesspad.statustext.settext("不能加入游戏");chessclient.controlpad.cancelgamebutton.setenabled(false);chessclient.controlpad.joingamebutton.setenabled(true);chessclient.controlpad.creatgamebutton.setenabled(true);}catch(exception ef){chessclient.chatpad.chatlinearea.settext("chessclient.chesspad.ches ssocket.close无法关闭");}chessclient.controlpad.joingamebutton.setenabled(true);}else if(recmessage.startswith("/peer ")){chessclient.chesspad.chesspeername=recmessage.substring(6);if(chessclient.isserver){chessclient.chesspad.chesscolor=1;chessclient.chesspad.ismouseenabled=true;chessclient.chesspad.statustext.settext("请黑棋下子");}else if(chessclient.isclient){chessclient.chesspad.chesscolor=-1;chessclient.chesspad.statustext.settext("已加入游戏,等待对方下子...");}}else if(recmessage.equals("/youwin")){chessclient.isonchess=false;chessclient.chesspad.chessvictory(chessclient.chesspad.chesscolor);chessclient.chesspad.statustext.settext("对方退出,请点放弃游戏退出连接");chessclient.chesspad.ismouseenabled=false;}else if(recmessage.equals("/ok")){chessclient.chesspad.statustext.settext("创建游戏成功,等待别人加入...");}else if(recmessage.equals("/error")){chessclient.chatpad.chatlinearea.append("传输错误:请退出程式,重新加入\n");}else{chessclient.chatpad.chatlinearea.append(recmessage+"\n");chessclient.chatpad.chatlinearea.setcaretposition(chessclient.chatpad.chatlinearea.gettext().length());}}public void run(){string message="";try{while(true){message=chessclient.in.readutf();acceptmessage(message);}}catch(ioexception es){}}}public class chessclient extends frame implements actionlistener,keylistener{userpad userpad=new userpad();chatpad chatpad=new chatpad();controlpad controlpad=new controlpad();chesspad chesspad=new chesspad();inputpad inputpad=new inputpad();socket chatsocket;datainputstream in;dataoutputstream out;string chessclientname=null;string host=null;int port=4331;boolean isonchat=false; //在聊天?boolean isonchess=false; //在下棋?boolean isgameconnected=false; //下棋的客户端连接?boolean isserver=false; //如果是下棋的主机boolean isclient=false; //如果是下棋的客户端panel southpanel=new panel();panel northpanel=new panel();panel centerpanel=new panel();panel westpanel=new panel();panel eastpanel=new panel();chessclient(){super("java五子棋客户端");setlayout(new borderlayout());host=controlpad.inputip.gettext(); westpanel.setlayout(new borderlayout()); westpanel.add(userpad,borderlayout.north); westpanel.add(chatpad,borderlayout.center); westpanel.setbackground(color.pink); inputpad.inputwords.addkeylistener(this); chesspad.host=controlpad.inputip.gettext(); centerpanel.add(chesspad,borderlayout.center); centerpanel.add(inputpad,borderlayout.south);centerpanel.setbackground(color.pink);controlpad.connectbutton.addactionlistener(this); controlpad.creatgamebutton.addactionlistener(this); controlpad.joingamebutton.addactionlistener(this); controlpad.cancelgamebutton.addactionlistener(this); controlpad.exitgamebutton.addactionlistener(this); controlpad.creatgamebutton.setenabled(false); controlpad.joingamebutton.setenabled(false); controlpad.cancelgamebutton.setenabled(false); southpanel.add(controlpad,borderlayout.center); southpanel.setbackground(color.pink); addwindowlistener(new windowadapter(){public void windowclosing(windowevent e){if(isonchat){try{chatsocket.close();}catch(exception ed){}}if(isonchess || isgameconnected) {try{chesspad.chesssocket.close();}catch(exception ee){}}system.exit(0);}public void windowactivated(windowevent ea) {}});add(westpanel,borderlayout.west);add(centerpanel,borderlayout.center);add(southpanel,borderlayout.south);pack();setsize(670,548);setvisible(true);setresizable(false);validate();}public boolean connectserver(string serverip,int serverport) throws exception{try{chatsocket=new socket(serverip,serverport);in=new datainputstream(chatsocket.getinputstream());out=new dataoutputstream(chatsocket.getoutputstream());clientthread clientthread=new clientthread(this);clientthread.start();isonchat=true;return true;}catch(ioexception ex){chatpad.chatlinearea.settext("chessclient:connectserver:无法连接,建议重新启动程式\n");}return false;}public void actionperformed(actionevent e){if(e.getsource()==controlpad.connectbutton){host=chesspad.host=controlpad.inputip.gettext();try{if(connectserver(host,port)){chatpad.chatlinearea.settext("");controlpad.connectbutton.setenabled(false);controlpad.creatgamebutton.setenabled(true);controlpad.joingamebutton.setenabled(true);chesspad.statustext.settext("连接成功,请创建游戏或加入游戏"); }}catch(exception ei){chatpad.chatlinearea.settext("controlpad.connectbutton:无法连接,建议重新启动程式\n");}}if(e.getsource()==controlpad.exitgamebutton){if(isonchat){try{chatsocket.close();}catch(exception ed){}}if(isonchess || isgameconnected){try{chesspad.chesssocket.close();}catch(exception ee){}}system.exit(0);}if(e.getsource()==controlpad.joingamebutton){string selecteduser=erlist.getselecteditem();if(selecteduser==null || selecteduser.startswith("[inchess]") || selecteduser.equals(chessclientname)){chesspad.statustext.settext("必须先选定一个有效用户");}else{try{if(!isgameconnected){if(chesspad.connectserver(chesspad.host,chesspad.port)){isgameconnected=true;isonchess=true;isclient=true;controlpad.creatgamebutton.setenabled(false);controlpad.joingamebutton.setenabled(false);controlpad.cancelgamebutton.setenabled(true);chesspad.chessthread.sendmessage("/joingame"+erlist.getselecteditem()+" "+chessclientname);}}else{isonchess=true;isclient=true;controlpad.creatgamebutton.setenabled(false);controlpad.joingamebutton.setenabled(false);controlpad.cancelgamebutton.setenabled(true);chesspad.chessthread.sendmessage("/joingame"+erlist.getselecteditem()+" "+chessclientname);}}catch(exception ee){isgameconnected=false;isonchess=false;isclient=false;controlpad.creatgamebutton.setenabled(true);controlpad.joingamebutton.setenabled(true);controlpad.cancelgamebutton.setenabled(false);chatpad.chatlinearea.settext("chesspad.connectserver无法连接\n"+ee);}}}if(e.getsource()==controlpad.creatgamebutton){try{if(!isgameconnected){if(chesspad.connectserver(chesspad.host,chesspad.port)){isgameconnected=true;isonchess=true;isserver=true;controlpad.creatgamebutton.setenabled(false);controlpad.joingamebutton.setenabled(false);controlpad.cancelgamebutton.setenabled(true);chesspad.chessthread.sendmessage("/creatgame "+"[inchess]"+chessclientname);}}else{isonchess=true;isserver=true;controlpad.creatgamebutton.setenabled(false);controlpad.joingamebutton.setenabled(false);controlpad.cancelgamebutton.setenabled(true);chesspad.chessthread.sendmessage("/creatgame "+"[inchess]"+chessclientname);}}catch(exception ec){isgameconnected=false;isonchess=false;isserver=false;controlpad.creatgamebutton.setenabled(true);controlpad.joingamebutton.setenabled(true);controlpad.cancelgamebutton.setenabled(false);ec.printstacktrace();chatpad.chatlinearea.settext("chesspad.connectserver无法连接\n"+ec);}}if(e.getsource()==controlpad.cancelgamebutton){if(isonchess){chesspad.chessthread.sendmessage("/giveup "+chessclientname); chesspad.chessvictory(-1*chesspad.chesscolor);controlpad.creatgamebutton.setenabled(true);controlpad.joingamebutton.setenabled(true);controlpad.cancelgamebutton.setenabled(false);chesspad.statustext.settext("请建立游戏或加入游戏");}if(!isonchess){controlpad.creatgamebutton.setenabled(true);controlpad.joingamebutton.setenabled(true);controlpad.cancelgamebutton.setenabled(false);chesspad.statustext.settext("请建立游戏或加入游戏");}isclient=isserver=false;}}public void keypressed(keyevent e){textfield inputwords=(textfield)e.getsource();if(e.getkeycode()==keyevent.vk_enter){if(erchoice.getselecteditem().equals("所有人")) {try{out.writeutf(inputwords.gettext());inputwords.settext("");}catch(exception ea){chatpad.chatlinearea.settext("chessclient:keypressed无法连接,建议重新连接\n");erlist.removeall();erchoice.removeall();inputwords.settext("");controlpad.connectbutton.setenabled(true);}}else{try{out.writeutf("/"+erchoice.getselecteditem()+""+inputwords.gettext());inputwords.settext("");}catch(exception ea){chatpad.chatlinearea.settext("chessclient:keypressed无法连接,建议重新连接\n");erlist.removeall();erchoice.removeall();inputwords.settext("");controlpad.connectbutton.setenabled(true);}}}}public void keytyped(keyevent e){}public void keyreleased(keyevent e){}public static void main(string args[]){chessclient chessclient=new chessclient();}}/****************************************************************** ************************下面是:chessinteface.java******************************************************************* ***********************/import java.awt.*;import java.awt.event.*;import java.io.*;import .*;class userpad extends panel{list userlist=new list(10);userpad(){setlayout(new borderlayout());for(int i=0;i<50;i++){userlist.add(i+"."+"没有用户");}add(userlist,borderlayout.center);}}class chatpad extends panel{textarea chatlinearea=newtextarea("",18,30,textarea.scrollbars_vertical_only);chatpad(){setlayout(new borderlayout());add(chatlinearea,borderlayout.center);}}class controlpad extends panel{label iplabel=new label("ip",label.left); textfield inputip=new textfield("localhost",10); button connectbutton=new button("连接主机"); button creatgamebutton=new button("建立游戏"); button joingamebutton=new button("加入游戏"); button cancelgamebutton=new button("放弃游戏"); button exitgamebutton=new button("关闭程式"); controlpad(){setlayout(new flowlayout(flowlayout.left));setbackground(color.pink);add(iplabel);add(inputip);add(connectbutton);add(creatgamebutton);add(joingamebutton);add(cancelgamebutton);add(exitgamebutton);}}class inputpad extends panel{textfield inputwords=new textfield("",40); choice userchoice=new choice();inputpad(){setlayout(new flowlayout(flowlayout.left));for(int i=0;i<50;i++){userchoice.additem(i+"."+"没有用户");}userchoice.setsize(60,24);add(userchoice);add(inputwords);}}/****************************************************************** ****************************下面是:chesspad.java******************************************************************* ***************************/import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.util.*;class chessthread extends thread{chesspad chesspad;chessthread(chesspad chesspad){this.chesspad=chesspad;}public void sendmessage(string sndmessage){try{chesspad.outdata.writeutf(sndmessage);}catch(exception ea){system.out.println("chessthread.sendmessage:"+ea);}}public void acceptmessage(string recmessage){if(recmessage.startswith("/chess ")){stringtokenizer usertoken=new stringtokenizer(recmessage," "); string chesstoken;string[] chessopt={"-1","-1","0"};int chessoptnum=0;while(usertoken.hasmoretokens()){chesstoken=(string)usertoken.nexttoken(" ");if(chessoptnum>=1 && chessoptnum<=3){chessopt[chessoptnum-1]=chesstoken;}chessoptnum++;}chesspaint(integer.parseint(chessopt[0]),integer.parsei nt(chessopt[1]),integer.parseint(chessopt[2]));}else if(recmessage.startswith("/yourname ")){chesspad.chessselfname=recmessage.substring(10);}else if(recmessage.equals("/error")){chesspad.statustext.settext("错误:没有这个用户,请退出程式,重新加入");}else{//system.out.println(recmessage);}}public void run(){string message="";try{while(true){message=chesspad.indata.readutf(); acceptmessage(message);}}catch(ioexception es){}}}class chesspad extends panel implementsmouselistener,actionlistener{int chesspoint_x=-1,chesspoint_y=-1,chesscolor=1;int chessblack_x[]=new int[200];int chessblack_y[]=new int[200];int chesswhite_x[]=new int[200];int chesswhite_y[]=new int[200];int chessblackcount=0,chesswhitecount=0;int chessblackwin=0,chesswhitewin=0;boolean ismouseenabled=false,iswin=false,isingame=false;textfield statustext=new textfield("请先连接服务器");socket chesssocket;datainputstream indata;dataoutputstream outdata;string chessselfname=null;string chesspeername=null;string host=null;int port=4331;chessthread chessthread=new chessthread(this);chesspad(){setsize(440,440);setlayout(null);setbackground(color.pink);addmouselistener(this);add(statustext);statustext.setbounds(40,5,360,24);statustext.seteditable(false);}public boolean connectserver(string serverip,int serverport) throws exception{try{chesssocket=new socket(serverip,serverport);indata=new datainputstream(chesssocket.getinputstream()); outdata=new dataoutputstream(chesssocket.getoutputstream()); chessthread.start();return true;}catch(ioexception ex){statustext.settext("chesspad:connectserver:无法连接\n"); }return false;}public void chessvictory(int chesscolorwin){this.removeall();for(int i=0;i<=chessblackcount;i++) {chessblack_x[i]=0;chessblack_y[i]=0;}for(int i=0;i<=chesswhitecount;i++) {chesswhite_x[i]=0;chesswhite_y[i]=0;}chessblackcount=0;chesswhitecount=0;add(statustext);statustext.setbounds(40,5,360,24); if(chesscolorwin==1){ chessblackwin++;statustext.settext("黑棋胜,黑:白为"+chessblackwin+":"+chesswhitewin+",重新开局,等待白棋下子...");}else if(chesscolorwin==-1){chesswhitewin++;statustext.settext("白棋胜,黑:白为"+chessblackwin+":"+chesswhitewin+",重新开局,等待黑棋下子...");}}public void getlocation(int a,int b,int color){if(color==1){chessblack_x[chessblackcount]=a*20;chessblack_y[chessblackcount]=b*20;chessblackcount++;}else if(color==-1){chesswhite_x[chesswhitecount]=a*20;chesswhite_y[chesswhitecount]=b*20;chesswhitecount++;}}public boolean checkwin(int a,int b,int checkcolor){int step=1,chesslink=1,chesslinktest=1,chesscompare=0;if(checkcolor==1){chesslink=1;for(step=1;step<=4;step++){for(chesscompare=0;chesscompare<=chessblackcount;chesscompare++) {if(((a+step)*20==chessblack_x[chesscompare]) && ((b*20)==chessblack_y[chesscompare])){chesslink=chesslink+1;if(chesslink==5){return(true);}}}if(chesslink==(chesslinktest+1))chesslinktest++;elsebreak;}for(step=1;step<=4;step++){for(chesscompare=0;chesscompare<=chessblackcount;chesscompare++) {if(((a-step)*20==chessblack_x[chesscompare]) &&(b*20==chessblack_y[chesscompare])){chesslink++;if(chesslink==5){return(true);}}}if(chesslink==(chesslinktest+1))chesslinktest++;elsebreak;}chesslink=1;chesslinktest=1;for(step=1;step<=4;step++){for(chesscompare=0;chesscompare<=chessblackcount;chesscompare++) {if((a*20==chessblack_x[chesscompare]) &&((b+step)*20==chessblack_y[chesscompare])){chesslink++;if(chesslink==5){return(true);}}}if(chesslink==(chesslinktest+1))chesslinktest++;elsebreak;}for(step=1;step<=4;step++){for(chesscompare=0;chesscompare<=chessblackcount;chesscompare++) {if((a*20==chessblack_x[chesscompare]) && ((b-step)*20==chessblack_y[chesscompare])){chesslink++;if(chesslink==5){return(true);}}}if(chesslink==(chesslinktest+1))chesslinktest++;elsebreak;}chesslink=1;chesslinktest=1;for(step=1;step<=4;step++){for(chesscompare=0;chesscompare<=chessblackcount;chesscompare++) {if(((a-step)*20==chessblack_x[chesscompare]) &&((b+step)*20==chessblack_y[chesscompare])){chesslink++;if(chesslink==5){return(true);}}}if(chesslink==(chesslinktest+1))chesslinktest++;elsebreak;}for(step=1;step<=4;step++){for(chesscompare=0;chesscompare<=chessblackcount;chesscompare++) {if(((a+step)*20==chessblack_x[chesscompare]) && ((b-step)*20==chessblack_y[chesscompare])){chesslink++;if(chesslink==5){return(true);}}}if(chesslink==(chesslinktest+1))chesslinktest++;elsebreak;}chesslink=1;chesslinktest=1;for(step=1;step<=4;step++){for(chesscompare=0;chesscompare<=chessblackcount;chesscompare++){if(((a+step)*20==chessblack_x[chesscompare]) && ((b+step)*20==chessblack_y[chesscompare])){chesslink++;if(chesslink==5){return(true);}}}if(chesslink==(chesslinktest+1))chesslinktest++;elsebreak;}for(step=1;step<=4;step++){for(chesscompare=0;chesscompare<=chessblackcount;chesscompare++) {if(((a-step)*20==chessblack_x[chesscompare]) && ((b-step)*20==chessblack_y[chesscompare])){chesslink++;if(chesslink==5){return(true);}}}if(chesslink==(chesslinktest+1))chesslinktest++;elsebreak;。

五子棋java课程设计

五子棋java课程设计一、课程目标知识目标:1. 让学生掌握五子棋的基本规则及算法实现;2. 让学生了解Java编程语言中面向对象编程的基本概念,如类、对象、方法和属性;3. 让学生掌握Java中图形用户界面(GUI)设计的基本方法。

技能目标:1. 培养学生运用Java编程实现五子棋游戏的能力;2. 培养学生利用面向对象编程思想进行问题分析和解决的能力;3. 培养学生运用Java GUI组件设计用户界面的能力。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学生的求知欲和创新能力;2. 培养学生团队合作精神,学会共同解决问题和分享成果;3. 培养学生遵守编程规范,养成良好的编程习惯。

课程性质:本课程为信息技术学科选修课程,旨在通过五子棋游戏设计,提高学生的编程能力和逻辑思维能力。

学生特点:学生处于初中阶段,具备一定的编程基础,对游戏设计感兴趣,喜欢动手实践。

教学要求:结合学生特点,注重实践操作,引导学生运用所学知识解决问题,培养学生的编程思维和创新能力。

在教学过程中,将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 五子棋基本规则介绍:游戏规则、胜负判定方法;2. Java面向对象编程基本概念:类与对象、构造方法、成员变量、成员方法;3. Java图形用户界面设计:Swing组件、布局管理器、事件处理;4. 五子棋游戏设计:a. 游戏界面设计:使用Swing组件设计游戏界面,包括棋盘、按钮等;b. 棋盘逻辑实现:实现棋子的落子、判断胜负等功能;c. 人工智能算法:引入简单的人工智能算法,实现电脑自动下棋;5. 测试与优化:对五子棋游戏进行测试,优化代码性能,提高用户体验。

教学内容安排和进度:第一课时:五子棋基本规则介绍,面向对象编程基本概念;第二课时:Java GUI设计基础,布局管理器使用;第三课时:五子棋游戏界面设计,事件处理;第四课时:棋盘逻辑实现,电脑自动下棋;第五课时:人工智能算法引入,游戏测试与优化。

JAVA五子棋游戏(控制台程序)

JAVA五子棋游戏(控制台程序)//==================类1================================public class Chessboard{private String[][] init;static final int BOARD_SIZE = 22;public void initBoard(){// 初始化棋盘,开始新的游戏时,应该调用此方法init = new String[15][15];for (int i = 0; i < init.length; i++){for (int j = 0; j < init[i].length; j++){init[i][j] = "﹢";}}}public void printBoard(){// 在控制台输出棋盘,各方每一完一颗棋子后,由于棋盘上棋子的状态有改变,// 所以必须调用此方法重新输入棋盘for (String[] row : init){for (String string : row){System.out.print(string);}System.out.println();}}public void setBoard(int posX, int posY, String chessman){// posX与posY是新下棋子的x与y坐标,,chessman是新下棋子的类型(黑子与白子),// 每下完一颗棋子后,通过调用此方法把棋子设置到棋盘上。

if (chessman.equals(Chessman.WHITE.getChessman())){init[posX][posY] = chessman;}else{init[posX][posY] = Chessman.BLACK.getChessman();}}public String[][] getBoard(){// 返回棋盘,返回类型是保存棋盘的二维数组return init;}}//================类2========================public enum Chessman{BLACK("●"), WHITE("○");private String chessman;private Chessman(String chessman){this.chessman = chessman;}public String getChessman(){return this.chessman;}}//=============类3===============================import java.util.Random;import java.util.Scanner;public class GobangGame{public static final int WIN_COUNT = 5;private int posX = 0, posY = 0;private Chessboard chessboard;/** public GobangGame() {** }*/public GobangGame(Chessboard chessboard){this.chessboard = chessboard;}public boolean isVaild(String inputStr){// 此方法验证控制台的输入字符串是否合法,如果合法,返回true,// 如果不合法,则返回false,此方法抛出Exception异常int[] p = new int[2];String[] pointStrings = inputStr.split(",");try{for (int i = 0; i < pointStrings.length; i++){p[i] = Integer.parseInt(pointStrings[i]) - 1;}}catch (Exception e){// TODO Auto-generated catch blockSystem.out.println("输入格式不合法,请重新输入!");return false;}if ((p[0] >= 0 && p[0] < 15) && (p[1] >= 0 && p[1] < 15)) {if (!chessboard.getBoard()[p[1]][p[0]].equals("﹢")){System.out.println("位置不合法,请重新输入!");return false;}else{posX = p[1];posY = p[0];chessboard.setBoard(posX, posY, Chessman.BLACK.getChessman());chessboard.printBoard();return true;}}else{System.out.println("x与y的坐标只能是1~15的数字,请重新输入!");return false;}}public void start(){// 开始游戏// Chessboard chessboard=new Chessboard();chessboard.initBoard();System.out.println("初始化棋盘。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档