《Java语言程序设计》
课程设计报告
分 院: 电 信 分 院
班 级: _电子商务1班___
姓 名: 何芳林
学 号: 20100210460123
指导教师: 吴军良
课设时间:20##-12-20至20##-12-31
二O一一 年 十 二月 二十 日
目 录
一、设计要求…………………………………………....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)){ //判断输赢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 测试结果
a. 进入游戏界面
游戏开始的界面有三个选择项,用户可以选择相应的角色,选择
完毕后点击开始进入游戏。
b. 选择角色,开始下棋
首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!
c. 下完后,重新开始
下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.
d.游戏中点退出,自动判输
在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输
四、课程设计心得体会
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。
五、参考文献
1. 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社
2. 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社
3.丁振凡 Java 语言实用教程 :北京邮电大学出版社
附录 (源代码)
import java.net.*;
import java.io.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.Color;
public class wuziqi 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();
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);
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();
// color_Qizi=m;
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);
}
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;
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;
}
}
public String Get_qizi_color(int x)
{
if (x==0)
{
return "黑子";
}
else
{
return "白子";
}
}
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);
}
}
public void Game_start(){ //游戏开始
intGame_Start=1;
Game_btn_enable(false);
b2.setEnabled(true);
}
public void Game_start_csh() {//游戏开始初始化
intGame_Start=0;
Game_btn_enable(true);
b2.setEnabled(false);
ckbHB[0].setState(true);
for (int i=0;i<16 ;i++ ){
for (int j=0;j<16 ;j++ ){
intGame_Body[i][j]=0;
}
}
lblWin.setText("");
}
public void Game_re(){ //重新开始游戏
repaint();
Game_start_csh();
}
public void Game_btn_enable(boolean e){ //设置组件状态
b1.setEnabled(e);
b2.setEnabled(e);
ckbHB[0].setEnabled(e);
ckbHB[1].setEnabled(e);
}
public boolean Game_win_1(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 (intGame_Body[x1+i][y1]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=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){
return true;
}
else{
return false;
}
}
public boolean Game_win_2(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 (intGame_Body[x1][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=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){
return true;
}
else{
return false;
}
}
public boolean Game_win_3(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 (intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=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){
return true;
}
else{
return false;
}
}
public boolean Game_win_4(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 (intGame_Body[x1+i][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=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){
return true;
}
else{
return false;
}
}
}
<applet code="wuziqi.class"height=500 width=600>
</applet>
五子棋-课程设计报告单位分院(系)专业学号学生姓名指导教师完成日期20xx年05月日摘要五子棋的历史:五子棋是一种两人对弈的纯策略…
五子棋游戏课程设计报告(含源代码可以运行)目录第一章需求分析.11.1总体分析.11.2初始化.11.3主循环控制模块.11.4玩…
北京师范大学C语言课程设计报告课题名称:游戏五子棋指导教师:课题组员:院系:信息科学与技术时间:20##.3.15-20##.4.…
C语言程序设计课程设计报告课程题目年级专业学号姓名指导教师江苏师范大学数学与统计学院摘要五子棋是我国古代的传统的黑白棋种之一五子棋…
本科控制软件设计课程设计题目五子棋学院计信院专业自动化年级学号姓名谯平同组人张健李益指导教师黄仁杰20xx年9月6日1目录1设计简…
枣庄学院信息科学与工程学院课程设计任务书题目学号姓名专业计算机科学与技术课程java语言程序设计指导教师刘梦琳职称讲师完成时间20…
河南经贸职业学院信息管理系Java程序设计课程设计报告Java语言程序设计课程设计报告题目设计者班级学号指导教师系部专业信息管理系…
目录第一章软件开发平台游戏设计思路第二章小游戏五子棋的开发过程第一节JAVA基础知识第二节启动程序的分析第三节游戏设计过程第三章总…
课程设计论文任务书班一课程设计论文题目多用户五子棋游戏二课程设计论文工作自20xx年6月15日起至20xx年6月19日止三课程设计…
XXXX大学XX学院课程设计报告课程名称面向对象程序设计题目名称五子棋游戏设计学生姓名专业班级指导教师任晓强一课程设计目的与任务四…
人工智能课程设计I目录第一章需求分析111总体分析112初始化113主循环控制模块114玩家下子115盘面分析填写棋型表216对方…