
五子棋基础教程
-
2023年3月17日发(作者:牧童谣音乐教案)《Java语言程序设计》
课程设计报告
学院:信息科学技术学院
班级:软件技术2班
*名:***
学号:**********
指导教师:***
课设时间:2014-03-17至2014-03-26
二O一四年三月二十六日
1
目录
一、设计要求…………………………………………....2
二、设计步骤…………………………………………....2
2.1程序流程图………………………….…………...2
2.2程序的功能分配……………………….………...3
三、设计正文…………………………………………....6
3.1创建棋盘类……………………………………….6
3.2判断输赢功能实现……………………………….9
3.3测试结果……………………………………….....9
四、心得体会…………………………………………...12
五、参考文献…………………………………………...12
附录(源代码)……………………………………….13
2
一、课程设计要求
设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能:
1.选择落子的先后顺序
2.重置棋盘
3.刷新重新开始
4.退出提示
并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。
最后判断某一方是否为五子连珠。
实现一个简单的多用户五子棋的游戏程序,包括如下两个界面
(1)选择对弈桌(执黑、执白)。
(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);
二、设计步骤
2.1程序流程图
3
2.2程序的功能分配
a.棋盘的绘制
publicvoiddraw_qipan(GraphicsG)//画棋盘15*15{
or(ray);
3DRect(10,10,300,300,true);
or();
for(inti=1;i<16;i++){
ne(20,20*i,300,20*i);
ne(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=();
y1=();
if(()300||()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);
}
4
d.按钮的触发事件
publicvoidactionPerformed(ActionEvente){
Graphicsg=getGraphics();
if(rce()==b1){
Game_start();
}
else{
Game_re();
}
if(rce()==exist){
Game_re();
t(Get_qizi_color(color_Qizi)+"输了!");
intGame_Start=0;
}
e.判断落子的位置及画出相应的黑白棋子
publicvoidset_Qizi(intx,inty)//落子{
if(intGame_Start==0)//判断游戏未开始{
return;
}
if(intGame_Body[x/20][y/20]!=0){
return;
}
Graphicsg=getGraphics();
if(color_Qizi==1)//判断黑子还是白子{
or();
color_Qizi=0;
}
else{
or();
color_Qizi=1;
}
al(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{
t(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if(Game_win_2(x/20,y/20))//判断输赢2{
t(Get_qizi_color(color_Qizi)+"赢了!");
5
intGame_Start=0;
}
if(Game_win_3(x/20,y/20))//判断输赢3{
t(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if(Game_win_4(x/20,y/20))//判断输赢4{
t(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
}
6
三、设计正文
3.1创建棋盘类
PublicclassWcyChessextendsAppletimplements
ActionListener,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);
nds(330,50,80,30);
ionListener(this);
add(b2);
nds(330,90,80,30);
ionListener(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);
nds(330,180,80,30);
kground();
t("胜利者!");//没有显示?
ckbHB[2].setBounds(440,20,60,30);
add(exist);
nds(330,130,80,30);
7
ionListener(this);
//add(chat);nds(20,500,300,300);
();
ible(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=();
y1=();
if(()300||()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(rce()==b1){
Game_start();
}
else{
Game_re();
}
8
if(rce()==exist){
Game_re();
t(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
t(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if(Game_win_2(x/20,y/20)){//判断输赢2
t(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if(Game_win_3(x/20,y/20))//判断输赢3{
t(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if(Game_win_4(x/20,y/20))//判断输赢4{
t(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
9
3.3测试结果
a.进入游戏界面
游戏开始的界面有三个选择项,用户可以选择相应的角色,选择
完毕后点击开始进入游戏。
10
b.选择角色,开始下棋
首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!
c.下完后,重新开始
下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.
11
d.游戏中点退出,自动判输
在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输
12
四、课程设计心得体会
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我
遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程
设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让
我学会了在网上查阅那些无限的资料。由于自己的分析设计和程序经验不足,该系统设计和
实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差
等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬
请老师指导。
五、参考文献
1.吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社
2.柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社
3.丁振凡Java语言实用教程:北京邮电大学出版社
13
附录(源代码)
.*;
.*;
.*;
.*;
.*;
;
;
PublicclasswuziqiextendsAppletimplements
ActionListener,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);
nds(330,50,80,30);
ionListener(this);
add(b2);
nds(330,90,80,30);
ionListener(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);
nds(330,180,80,30);
kground();
14
t("胜利者!");//没有显示?
ckbHB[2].setBounds(440,20,60,30);
add(exist);
nds(330,130,80,30);
ionListener(this);
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=();
y1=();
if(()300||
()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(rce()==b1){
Game_start();
15
}
else{
Game_re();
}
if(rce()==exist){
Game_re();
//color_Qizi=m;
t(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){//判断黑子还是白子
or();
color_Qizi=0;
}
else{
or();
color_Qizi=1;
}
al(x-10,y-10,20,20);
intGame_Body[x/20][y/20]=color_Qizi+1;
if(Game_win_1(x/20,y/20)){//判断输赢1
t(Get_qizi_color(color_Qizi)+"
赢了!");
intGame_Start=0;
16
}
if(Game_win_2(x/20,y/20)){//判断输赢2{
t(Get_qizi_color(color_Qizi)+"赢
了!");
intGame_Start=0;
}
if(Game_win_3(x/20,y/20)){//判断输赢3
t(Get_qizi_color(color_Qizi)+"
赢了!");
intGame_Start=0;
}
if(Game_win_4(x/20,y/20)){//判断输赢4
t(Get_qizi_color(color_Qizi)+"
赢了!");
intGame_Start=0;
}
}
publicStringGet_qizi_color(intx)
{
if(x==0)
{
return"黑子";
}
else
{
return"白子";
}
}
publicvoiddraw_qipan(GraphicsG){//画棋盘
15*15
or(ray);
3DRect(10,10,300,300,true);
or();
for(inti=1;i<16;i++){
ne(20,20*i,300,20*i);
ne(20*i,20,20*i,300);
}
}
publicvoidGame_start(){//游戏开始
intGame_Start=1;
Game_btn_enable(false);
17
bled(true);
}
publicvoidGame_start_csh(){//游戏开始初始化
intGame_Start=0;
Game_btn_enable(true);
bled(false);
ckbHB[0].setState(true);
for(inti=0;i<16;i++){
for(intj=0;j<16;j++){
intGame_Body[i][j]=0;
}
}
t("");
}
publicvoidGame_re(){//重新开始游戏
repaint();
Game_start_csh();
}
publicvoidGame_btn_enable(booleane){//设置
组件状态
bled(e);
bled(e);
ckbHB[0].setEnabled(e);
ckbHB[1].setEnabled(e);
}
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){
18
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;
}
19
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;
20
}
}
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;
}
}
21
if(t>4){
returntrue;
}
else{
returnfalse;
}
}
}