文档库 最新最全的文档下载
当前位置:文档库 › java+五子棋+课程设计报告

java+五子棋+课程设计报告

java+五子棋+课程设计报告
java+五子棋+课程设计报告

课程设计(论文)任务书

软件学院软件工程+电子商务专业2007-2班

一、课程设计(论文)题目多用户五子棋游戏

二、课程设计(论文)工作自 2009年 6月 15日起至2009年 6月19 日止。

三、课程设计(论文) 地点: 创新大楼310

四、课程设计(论文)内容要求:

1.本课程设计的目的

(1)通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。

(2)通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。

2.课程设计的任务及要求

1)基本要求:

实现一个简单的多用户五子棋的游戏程序,包括如下两个界面

(1)选择对弈桌及角色(执黑、执白、观看)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。

2)创新要求:

在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。

3)课程设计论文编写要求

(1)要按照书稿的规格打印与写课程设计论文

(2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等

(3)课程设计论文装订按学校的统一要求完成

4)答辩与评分标准:

(1)完成基本算法设计:20分;

(2)完成设计过程:40分;

(3)完成调试:20分;

(4)回答问题:20分。

5)参考文献:

[1]吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社

[2]柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社

[3] (美)CayS.Horsttmann Gary Cornell JAVA核心技术卷i:基础知识(原书第七版):机械工业出版社

[4]丁振凡 Java 语言实用教程:北京邮电大学出版社

[5]https://www.wendangku.net/doc/9317186396.html,

6)课程设计进度安排

内容天数地点

构思及收集资料1图书馆

编码与调试 2.5实验室

撰写论文 1.5图书馆、实验室

学生签名:

2009年6 月15 日

课程设计(论文)评审意见

(1)完成基本算法(20分):优()、良()、中()、一般()、差();(2)完成调试(20分):优()、良()、中()、一般()、差();(3)创新设计(20分):优()、良()、中()、一般()、差();(4)设计分析(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是( )、否()

评阅人:职称:

2009年6月21 日

目录

绪论 (1)

一、题目内容及要求 (2)

二、设计思路 (2)

三、具体实现 (5)

四、测试结果 (55)

五、设计体会与小结 (149)

六、参考文献 .... .. (20)

附录 .... .. . (20)

绪论

Java是由美国的sun microsystems 公司发展出来的一套面向对象程序语言,因为它的面向对象,分散运算,跨平台等等特性,又支持多线程。使得许多用过的人都爱不释手。

Java既是一种程序设计语言,也是一个完整的平台。作为一种程序语言,它简洁、面向对象、安全、健壮,以及适用于Internet技术;而作为一个平台(JRE,Java Runtime Environment,Java运行环境或者说是Java虚拟机),对于符合Sun公司Java标准的应用程序,都可以在Java平台上正确运行,与程序运行的操作系统无关。

Java发展到今天,已从编程语言发展成为全球第一大通用开发平台。Java 技术已被计算机行业主要公司所采纳。1999年,Sun公司推出了以Java2平台为核心的J2EE、J2SE和J2ME三大平台。随着三大平台的迅速推进,全球形成了一股巨大的Java应用浪潮。

这个五子棋游戏正是用这个平台做的,在实践中充分体现出了Java面向对象给我们带来的方便。多用户聊天程序也让我体会到了Java多线程的强大功能。

一题目内容及要求

要求实现一个简单的多用户五子棋胡游戏程序,包括如下两个界面: (1)选择对弈桌及角色(执黑、执白、观看)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。

二设计思路

2.1工作原理图

2.2功能的规划

1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应胡触发事件。同时注意面板的设计,使面板设计的尽量胡的合理美观。

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;

}

2.编写一个功能判断落子的位置及画出相应的黑白棋子

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;

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;

} }

4.添加用户聊天功能

NetchatClient chat=new NetchatClient();

chat.frame();

chat.setVisible(true);

三具体实现

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;

}

//判断输赢程序实现在详细过程

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;

}

}

3.3实现聊天功能类

package NetchatClient;

import java.awt.*;

import java.awt.event.*;

import https://www.wendangku.net/doc/9317186396.html,.*;

import java.io.*;

import javax.swing.*;

public class NetchatClient extends Frame {

Frame x=new Frame("liaotianchengxu");

TextField tf=new TextField();

TextArea ta=new TextArea();

Socket s=null;

DataOutputStream dos=null;

public static void main(String[] args) {

new NetchatClient().frame();

}

public void frame(){

System.out.println("frame()");

setLocation(20, 400);

setSize(300,300);

add(tf,BorderLayout.SOUTH);

add(ta,BorderLayout.NORTH);

pack();

setVisible(true);

connect();

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent arg0) {

cconnect();

System.exit(0);

}

});

addWindowListener

(new WindowAdapter()//窗口适配器{

public void windowClosing(WindowEvent e)

{

System.exit(0);//程序退出

} } );

tf.addActionListener(new nclistener());

}

public void connect() {

System.out.println("connnect()..");

try {

s=new Socket("127.0.0.1",8888);//设置客户端的IP和端口

dos=new DataOutputStream(s.getOutputStream());

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}}

public void cconnect(){

try {

dos.close();

s.close();

} catch (IOException e) {

e.printStackTrace();

} }

public class nclistener implements ActionListener{

public void actionPerformed(ActionEvent e) {

String st=tf.getText();

ta.setText(st);

tf.setText("");

try {

dos.writeUTF(st);

dos.flush();

} catch (IOException e1) {

e1.printStackTrace();

} } } }

四测试结果

4.1 进入游戏的界面

分析:游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。用户也可以在下面的聊天框中进行聊天。

4.2选择角色,点击开始,开始下棋

分析:首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!

4.3下完后点击重新开始

分析:下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.

4.4游戏过程中退出,自动判输

相关文档