java五子棋课程设计任务书_第1页
java五子棋课程设计任务书_第2页
java五子棋课程设计任务书_第3页
java五子棋课程设计任务书_第4页
java五子棋课程设计任务书_第5页
已阅读5页,还剩25页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE枣庄学院信息科学与工程学院课程设计任务书题目:五子棋游戏学号:201012110132姓名:孙飞专业:计算机科学与技术课程:java语言程序设计指导教师:刘梦琳职称:讲师完成时间:2012年5月2012年6月枣庄学院信息科学与工程学院制课程设计任务书及成绩评定课程设计的任务和具体要求1.基本要求实现一个简单的多用户五子棋的游戏程序,包括如下两个界面(1)选择对弈桌及角色(执黑、执白、观看)。(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。2.创新要求:在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。指导教师签字:日期:指导教师评语成绩:指导教师签字:日期:课程设计所需软件、硬件等硬件环境:CPU主频在500MHZ以上,内存在128M以上软件环境:JAVA虚拟机+WindowsXP或Windows2000以上操作系统+Eclipse课程设计进度计划起至日期工作内容备注2012.5.20-2012.5.252012.5.26-2012.5.312012.6.1-2012.6.5构思及收集资料编码与调试撰写论文参考文献、资料索引序号文献、资料名称编著者出版单位[1].Java程序设计实例教程.吴其庆北京冶金工业出版社[2]Java语言应用开发基础柳西玲.许斌北京清华大学出版社[3]JAVA核心技术卷i:基础知识(美)CayS.Horsttmann机械工业出版社[4]Java语言实用教程丁振凡北京邮电大学出版社PAGE1目录绪论………………….……11.开发背景 ……..……………….………21.1开发环境及运行环境……………….…..……21.1.1开发环境……………….……………….……………..……………21.1.2运行环境……………….……….………..…………22.总体设计…………..……………22.1工作原理图………….……………22.2功能的规划……….………………33.详细设计 …………….……………53.1创建棋盘类…………….…………63.2判断输赢功能实现………….……………84.系统测试 …………..………………124.1进入游戏的界面……………….…………124.2选择角色,点击开始,开始下棋……………….……134.3下完后点击重新开始…………….………..…144.4游戏过程中退出,自动判输……………….………………..………154.5改进想法…………165.设计总结 ……………176.参考文献………………….………17附录…………18绪论Java是由美国的sunmicrosystems公司发展出来的一套面向对象程序语言,因为它的面向对象,分散运算,跨平台等等特性,又支持多线程。使得许多用过的人都爱不释手。Java既是一种程序设计语言,也是一个完整的平台。作为一种程序语言,它简洁、面向对象、安全、健壮,以及适用于Internet技术;而作为一个平台(JRE,JavaRuntimeEnvironment,Java运行环境或者说是Java虚拟机),对于符合Sun公司Java标准的应用程序,都可以在Java平台上正确运行,与程序运行的操作系统无关。Java发展到今天,已从编程语言发展成为全球第一大通用开发平台。Java技术已被计算机行业主要公司所采纳。1999年,Sun公司推出了以Java2平台为核心的J2EE、J2SE和J2ME三大平台。随着三大平台的迅速推进,全球形成了一股巨大的Java应用浪潮。 这个五子棋游戏正是用这个平台做的,在实践中充分体现出了Java面向对象给我们带来的方便。多用户聊天程序也让我体会到了Java多线程的强大功能。1.开发背景当前网络上流传的五子棋游戏功能并不尽善尽美,其中最主要的问题就是网络对战只能两个人一起玩,所以我决定开发一个多人同时进行网络对战的五子棋系统。1.1开发环境及运行环境1.1.1Intel?Pentium?4l2.0GHz,512M内存,80G硬盘Microsoft?Windows?XPProfessionallJDKl1.50Eclipse3.2l1.1.2IntelPentium?l2及以上处理器,32M以上内存,4G以上硬盘Microsoft?Windows?l9X/NT操作系统800*600或以上的屏幕分辨率2.总体设计2.1工作原理图开始开始下棋点击退出判断输赢判断胜负游戏结束重新开始结束程序选择角色2.2功能的规划1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应胡触发事件。同时注意面板的设计,使面板设计的尽量胡的合理美观。a.棋盘的绘制publicvoiddraw_qipan(GraphicsG)//画棋盘15*15{ G.setColor(Color.lightGray);//设置画刷颜色 G.fill3DRect(10,10,300,300,true);//绘制填充矩形,灰白色G.setColor(Color.black);//设置画刷颜色 for(inti=1;i<16;i++){//绘制纵横线 G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300); }}b.添加按钮与按钮胡规划Buttonb1=newButton("开始"); Buttonb2=newButton("重置游戏"); LabellblWin=newLabel(""); CheckboxckbHB[]=newCheckbox[3]; Buttonexist=newButton("退出"); publicvoidinit(){ ckbHB[0]=newCheckbox("执白",ckgHB,false); ckbHB[1]=newCheckbox("执黑",ckgHB,false); ckbHB[2]=newCheckbox("观看",ckgHB,false); }C.鼠标棋子胡相应触发事件publicvoidmouseClicked(MouseEvente){ Graphicsg=getGraphics();//在当前面板绘制图像 intx1,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){//点击点位于X相距20像素的两点间 x1+=10; } if(y1%20>10){//点击点位于y相距20像素的两点间 y1+=10; } x1=x1/20*20;//确定棋子可放置的交叉点X位置 y1=y1/20*20;//确定棋子可放置的交叉点y位置 set_Qizi(x1,y1);//调用函数set_Qizi,放置棋子 m*=(-1);//某方开始放置棋子,譬如m为正则黑方下棋}d.按钮的触发事件publicvoidactionPerformed(ActionEvente){ Graphicsg=getGraphics();//在当前面板绘制图像 if(e.getSource()==b1){ Game_start();//调用函数,开始游戏 } else{ Game_re();//调用函数,重新开始 } if(e.getSource()==exist){ Game_re();//调用函数,重新开始 lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");//调用函数Get_qizi_color(color_Qizi),其返回值为“黑子”或“白字” intGame_Start=0;//归0操作,表明游戏尚未开始2.编写一个功能判断落子的位置及画出相应的黑白棋子publicvoidset_Qizi(intx,inty)//落子{ if(intGame_Start==0)//判断游戏是否已开始{ return; } if(intGame_Body[x/20][y/20]!=0){//该交叉点已被占用 return; } Graphicsg=getGraphics();//在当前面板绘制图像 if(color_Qizi==1)//判断棋子的黑白{ g.setColor(Color.black);//若棋子为黑,即color_Qizi==1,设置黑色画笔 color_Qizi=0;//下一步由白子,故赋值为0 } else{ g.setColor(Color.white);//棋子为白子,设置画笔为白 color_Qizi=1;//下一步为黑子,故赋值为1 } g.fillOval(x-10,y-10,20,20);//绘制填充椭圆 intGame_Body[x/20][y/20]=color_Qizi+1;//棋盘交叉点已占用,即不为零}3.判断胜负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.详细设计3.1创建棋盘类PublicclassWcyChessextendsAppletimplementsActionListener,MouseListener,MouseMotionListener,ItemListener{ intcolor_Qizi=0;//旗子的颜色标识0:白子1:黑子 intintGame_Start=0;//游戏开始标志0未开始1游戏中 intintGame_Body[][]=newint[16][16];//设置棋盘棋子状态 intm=-1; Buttonb1=newButton("开始"); Buttonb2=newButton("重置游戏"); LabellblWin=newLabel(""); CheckboxckbHB[]=newCheckbox[3]; Buttonexist=newButton("退出"); CheckboxGroupckgHB=newCheckboxGroup(); NetchatClientchat=newNetchatClient();//对话框类实体 publicvoidinit(){ 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]=newCheckbox("执白",ckgHB,false); ckbHB[0].setBounds(320,20,60,30); ckbHB[1]=newCheckbox("执黑",ckgHB,false); ckbHB[1].setBounds(380,20,60,30); ckbHB[2]=newCheckbox("观看",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); } publicvoiditemStateChanged(ItemEvente){ if(ckbHB[0].getState())//选择黑子还是白子{ color_Qizi=0; } else{ color_Qizi=1; } } publicvoidmousePressed(MouseEvente){} publicvoidmouseClicked(MouseEvente){ Graphicsg=getGraphics(); intx1,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); } publicvoidactionPerformed(ActionEvente){ Graphicsg=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; } } publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidmouseDragged(MouseEvente){} publicvoidmouseMoved(MouseEvente){} publicvoidpaint(Graphicsg){ draw_qipan(g); }3.2判断输赢功能实现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; }//判断输赢程序实现在详细过程 publicbooleanGame_win_1(intx,inty){//横向判断输赢 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i<5;i++){ if(x1>15){ break; } if(intGame_Body[x1+i][y1]==intGame_Body[x][y]){ t+=1; } else{ break; } } for(inti=1;i<5;i++){ if(x1<1) break; } if(intGame_Body[x1-i][y1]==intGame_Body[x][y]) t+=1; } else{ break; } } if(t>4){ returntrue; } else{ returnfalse; } } publicbooleanGame_win_2(intx,inty){//纵向判断输赢 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i<5;i++){ if(x1>15){ break; } if(intGame_Body[x1][y1+i]==intGame_Body[x][y]){ t+=1; } else{ break; } } for(inti=1;i<5;i++){ if(x1<1){ break; } if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){ t+=1; } else{ break; } } if(t>4){ returntrue; } else{ returnfalse; } } publicbooleanGame_win_3(intx,inty)//左斜判断输赢{ intx1,y1,t=1; x1=x; y1=y; for(inti=1;i<5;i++){ if(x1>15){ break; } if(intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){ t+=1; } else{ break; } } for(inti=1;i<5;i++){ if(x1<1){ break; } if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){ t+=1; } else{ break; } } if(t>4){ returntrue; } else{ returnfalse; }} publicbooleanGame_win_4(intx,inty){//左斜判断输赢 intx1,y1,t=1; x1=x; y1=y; for(inti=1;i<5;i++){ if(x1>15) { break; } if(intGame_Body[x1+i][y1+i]==intGame_Body[x][y]) { t+=1; } else { break; } } for(inti=1;i<5;i++){ if(x1<1){ break; } if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]){ t+=1; } else{ break; } } if(t>4){ returntrue; } else{ returnfalse; } }4.系统测试4.1进入游戏的界面分析:游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。用户也可以在下面的聊天框中进行聊天。4.2选择角色,点击开始,开始下棋分析:首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!4.3下完后点击重新开始分析:下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.4.4游戏过程中退出,自动判输分析:在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输4.5改进想法这个系统基本上实现了要求但是在有些方面还不够完善。观看角色点击后不会出发什么事件,虽然观看者并不需要做什么但是点击之后并没有发生任何反应总感觉缺点什么。想加个什么功能,但是又不知道加什么才不至于画蛇添足。这是一个单机版的五子棋游戏,本来想要加入多人游戏模式,但是编程过程中遇到很多问题没能解决,所以还需要学习更多的专业知识去完善。5.设计总结这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。但可以肯定,这个课设题的要求绝对在我的能力范围以上。之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。尽管这个系统做的并不是那么的完善。对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java中的绝大多数的知识点,如Java图形用户界面设计、Java的异常处理机制、Java中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。好在有一定的C++基础Java与C++语法类似,并把C++中一些较低级和较难以理解的功能都去掉了,如多继承、指针等,同时Java增强了部分功能。所以理解起来也比较容易。但是理解了Java的规则要把这个课设做好也不是那么容易,最难的部分是如何实现各个功能的划分和类的通讯问题。我在这方面就遇到了不少的问题。总结这次课设,我还是收获不少。虽然界面也不是很美观,有点功能间的连接做的也不是特别的好,但是我能认识到自己的不足,并且在跟同学的交流中也学到了一些他们的设计思路,也知道今后要加强哪些方面的知识。6.参考文献1.吴其庆编著.Java程序设计实例教程.北京,冶金工业出版社2.柳西玲.许斌编著.Java语言应用开发基础.北京,清华大学出版社3.(美)CayS.HorsttmannGaryCornellJAVA核心技术卷i基础知识(原书第七版)机械工业出版社4.丁振凡Java语言实用教程,北京邮电大学出版社5.附录(源代码)importjava.io.*;importjava.applet.*;importjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;importjava.awt.Color;publicclassWcyChessextendsAppletimplementsActionListener,MouseListener,MouseMotionListener,ItemListener{ intcolor_Qizi=0;//旗子的颜色标识0:白子1:黑子 intintGame_Start=0;//游戏开始标志0未开始1游戏中 intintGame_Body[][]=newint[16][16];//设置棋盘棋子状态 intm=-1; Buttonb1=newButton("开始"); Buttonb2=newButton("重置游戏"); LabellblWin=newLabel(""); CheckboxckbHB[]=newCheckbox[3]; Buttonexist=newButton("退出"); CheckboxGroupckgHB=newCheckboxGroup(); publicvoidinit(){ 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]=newCheckbox("执白",ckgHB,false); ckbHB[0].setBounds(320,20,60,30); ckbHB[1]=newCheckbox("执黑",ckgHB,false); ckbHB[1].setBounds(380,20,60,30); ckbHB[2]=newCheckbox("观看",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); Game_start_csh(); setSize(500,600); setVisible(true); } publicvoiditemStateChanged(ItemEvente){ if(ckbHB[0].getState())//选择黑子还是白子 { color_Qizi=0; } else { color_Qizi=1; } } publicvoidmousePressed(MouseEvente){} publicvoidmouseClicked(MouseEvente){ Graphicsg=getGraphics(); intx1,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); } publicvoidactionPerformed(ActionEvente){ Graphicsg=getGraphics(); if(e.getSource()==b1){ Game_start(); } else{ Game_re(); } if(e.getSource()==exist){ Game_re();// color_Qizi=m; lblWin.setText(Get_qizi_color(color_Qizi)+"输了!"); intGame_Start=0; } } publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidmouseDragged(MouseEvente){} publicvoidmouseMoved(MouseEvente){} publicvoidpaint(Graphicsg){ draw_qipan(g); } publicvoidset_Qizi(intx,inty){//落子 if(intGame_Start==0){//判断游戏未开始 return; } if(intGame_Body[x/20][y/20]!=0){ return; } Graphicsg=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; 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; } } publicStringGet_qizi_color(intx) { if(x==0) { return"黑子"; } else { return"白子"; } } publicvoiddraw_qipan(GraphicsG){//画棋盘15*15 G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(inti=1;i<16;i++){ G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300); } } publicvoidGame_start(){//游戏开始 intGame_Start=1; Game_btn_enable(false); b2.setEnabled(true); } publicvoidGame_start_csh(){//游戏开始初始化 intGame_Start=0; Game_btn_enable(true); b2.setEnabled(false); ckbHB[0].setState(true); for(inti=0;i<16;i++){ for(intj=0;j<16;j++){ intGame_Body[i][j]=0; } } lblWin.setText(""); } publicvoidGame_re(){//重新开始游戏 repaint(); Game_start_csh(); } publicvoidGame_btn_enable(booleane){//设置组件状态 b1.setEnabled(e); b2.setEnabled(e); ckbHB[0].setEnabled(e); ckbHB[1].setEna

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论