✅ 操作成功!

五子棋基础教程

发布时间:2023-06-12 作者:admin 来源:文学

五子棋基础教程

五子棋基础教程

-

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;

}

}

}

👁️ 阅读量:0