第一篇:五子棋JAVA語言課程設(shè)計報告
《Java語言程序設(shè)計》
課程設(shè)計報告
學(xué) 院: 信息科學(xué)技術(shù)學(xué)院 班 級: 軟件技術(shù)2班 姓 名: 王更新 學(xué) 號: 1108900505 指導(dǎo)教師: 郭韶升 課設(shè)時間: 2014-03-17 至2014-03-26
二O一四 年 三月 二十六 日
目 錄
一、設(shè)計要求…………………………………………....2
二、設(shè)計步驟…………………………………………....2 2.1程序流程圖………………………….…………...2 2.2程序的功能分配……………………….………...3
三、設(shè)計正文…………………………………………....6 3.1創(chuàng)建棋盤類……………………………………….6 3.2判斷輸贏功能實現(xiàn)……………………………….9 3.3測試結(jié)果……………………………………….....9
四、心得體會…………………………………………...12
五、參考文獻…………………………………………...12 附錄(源代碼)……………………………………….13
一、課程設(shè)計要求
設(shè)計一個15╳15圍棋棋盤,由兩玩家交替進行對戰(zhàn),并可以實現(xiàn)以下功能: 1.選擇落子的先后順序 2.重置棋盤 3.刷新重新開始 4.退出提示
并且規(guī)定退出者判為負,但退出過程中要有提示。以防不小心點錯了。最后判斷某一方是否為五子連珠。
實現(xiàn)一個簡單的多用戶五子棋的游戲程序,包括如下兩個界面(1)選擇對弈桌(執(zhí)黑、執(zhí)白)。
(2)在游戲界面,有開始,退出(游戲未結(jié)束、點退出自動判負);
二、設(shè)計步驟
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(“執(zhí)白”,ckgHB,false);
ckbHB[1]=new Checkbox(“執(zhí)黑”,ckgHB,false);
ckbHB[2]=new Checkbox(“觀看”,ckgHB, false);}
c.鼠標棋子的觸發(fā)事件
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.按鈕的觸發(fā)事件
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.判斷落子的位置及畫出相應(yīng)的黑白棋子 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;} }
三、設(shè)計正文
3.1創(chuàng)建棋盤類
Public class WcyChess extends Applet ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的顏色標識 0:白子 1:黑子
int intGame_Start=0;//游戲開始標志 0未開始 1游戲中
int intGame_Body[][]=new int[16][16];//設(shè)置棋盤棋子狀態(tài)
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(“執(zhí)白”,ckgHB,false);
ckbHB[0].setBounds(320,20,60,30);
ckbHB[1]=new Checkbox(“執(zhí)黑”,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);
implements
//
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判斷輸贏功能實現(xiàn)
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 測試結(jié)果
a.進入游戲界面
游戲開始的界面有三個選擇項,用戶可以選擇相應(yīng)的角色,選擇 完畢后點擊開始進入游戲。
b.選擇角色,開始下棋
首先達到五個棋子連在一塊的贏了,并在紅色區(qū)域顯示誰贏了!c.下完后,重新開始
下完一盤后游戲停止,點擊重新開始,界面回到初始界面,選擇角色繼續(xù)游戲.d.游戲中點退出,自動判輸
在下棋的過程當中誰中途退出,即點擊退出,系統(tǒng)自動判斷誰輸
四、課程設(shè)計心得體會
通過此次課程設(shè)計,將我本學(xué)期所學(xué)的JAVA知識得到鞏固和應(yīng)用,在設(shè)計的過程中我遇到了很到問題,不過在老師和同學(xué)們的幫助和自己的思考下還是很好的完成了。這此課程設(shè)計還讓我懂得了寫程序不能閉門造車,要努力拓寬知識面,開闊視野,拓展思維。它還讓我學(xué)會了在網(wǎng)上查閱那些無限的資料。由于自己的分析設(shè)計和程序經(jīng)驗不足,該系統(tǒng)設(shè)計和實現(xiàn)過程中,還有許多沒有完善的地方,比如用戶界面設(shè)計不夠美觀,異常出錯處理比較差等多方面問題,這些都有待進一步完善和提高。對于文中出現(xiàn)的不足和系統(tǒng)中出現(xiàn)的問題敬請老師指導(dǎo)。
五、參考文獻
1.吳其慶編著.Java程序設(shè)計實例教程.北京:冶金工業(yè)出版社 2.柳西玲.許斌編著.Java語言應(yīng)用開發(fā)基礎(chǔ).北京:清華大學(xué)出版社 3.丁振凡 Java 語言實用教程 :北京郵電大學(xué)出版社
附錄(源代碼)
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];//設(shè)置棋盤棋子狀態(tài)
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(“執(zhí)白”,ckgHB,false);
ckbHB[0].setBounds(320,20,60,30);
ckbHB[1]=new Checkbox(“執(zhí)黑”,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);
e.getY()<20 || e.getY()>300){
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 ||
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;
了!“);
贏了!”);
贏了!“);
15*15
}
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){ //畫棋盤 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){ //設(shè)置組件狀態(tài)
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){){
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;
}
break;
}
if(intGame_Body[x1-i][y1]==intGame_Body[x][y]
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;
} } }
第二篇:Java五子棋實現(xiàn)報告
一、實驗?zāi)康?/p>
(1)使用Java編寫五子棋程序
(2)掌握編寫過程的一些類和類成員的使用,并且了解五子棋制作過程的一些步驟和了解一些算法。
二、實驗環(huán)境
在電子樓2樓,裝有My Eclipse 的計算機上進行
三、實驗內(nèi)容
編寫一個五子棋程序。程序主要實現(xiàn)以下功能:
1.實現(xiàn)五子棋界面,要求人性化界面簡潔美觀; 2.實現(xiàn)黑白色輪流下棋功能,能提示下棋方; 3.實現(xiàn)連成五子自動判斷功能; 4.實現(xiàn)時間設(shè)置功能,認輸功能;
核心代碼如下:
1.我的第一步是設(shè)計界面。在這個過程的要使用到以下的步驟:
1.使用MyEclipse 創(chuàng)建一個Project關(guān)于這個工程,加入兩個類,分別是ChessFrame和Chess,而ChessFrame是這個工程中最重要的一個部分。創(chuàng)建過程中要繼承JFrame類,并且要繼承Runnable 和 MouseListener 這兩個接口,分別是用來監(jiān)聽鼠標的移動和時間的變化。2.在給這個JFrame設(shè)置大小和顏色等一些東西。這里最主要的是使用了兩個函數(shù),是以前沒見過的:
1.這個是用來設(shè)置默認的窗口關(guān)閉事件的
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2.這兩個是用來獲得屏幕的大小的
Toolkit.getDefaultToolkit().getScreenSize().height;Toolkit.getDefaultToolkit().getScreenSize().width;
3.把本地的背景圖片加到這個窗口中,作為這個窗口的背景圖:
使用的到的類有BufferedImage和 ImageIO這兩個類,這兩個類是專門用來處理這種功能的。主要的代碼如下:
BufferedImage bg = null;bg = ImageIO.read(new File(“e:/background.jpg”));g.drawImage(bg,0,0,this);這樣這個圖片就加到了這個窗口的背景去了。
這里有一個改進就是雙緩沖技術(shù),可以防止閃屏。這個技術(shù)就是在界面和內(nèi)存都有一幅圖,我們的改動不是直接畫界面,而是內(nèi)存中先畫好然后把內(nèi)存中直接顯示出來,那樣就沒有了一前一后的,那就沒有了閃屏的事情發(fā)生了。
4.就是畫棋盤和寫一些游戲信息:
這步比較簡單,也沒什么可以說的,用到的一些畫線的函數(shù),和寫String的一些函數(shù)。
以上做完以后就可以出現(xiàn)以下的界面:
1.我的第二步就是增加對mouse的點擊和移動的處理,這樣以后就可以用來下棋。在這個過程的要使用到以下的步驟: 1.增加對mouse的監(jiān)視,然后重寫它的一些函數(shù):
1.我們在ChessFrame的構(gòu)造函數(shù)中加入了addMouseListener()函數(shù),然后重寫關(guān)于這個的四個函數(shù),我們這這里不重寫所有的函數(shù),就改寫一個MousePress函數(shù)就可以了。改寫的代碼如下:
public void mousePress(MouseEvent arg0){
this.x = arg0.getX();this.y = arg0.getY();if(this.canplay)
} this.repaint();現(xiàn)在要處理的就是加上棋子了,我在這個做了一下小改動可以更加準確的定位下棋的位置:
if(x >= 10 && x <= 374 && y >= 72 && y <= 450){
int sx1 =(this.x72)/ 20;int yx1 =(this.x72)% 20;if(yx1 >= 10){ } if(yy2 >= 10){ } sy2++;sx1++;就是這個,我們通過監(jiān)控鼠標的就可以得到點擊的X,Y坐標,我在這里通過對它求余,假如余數(shù)大于10(就是一個格子的一半)那就給+1,不然不變。后面的畫棋子是很簡單的一個過程,使用的是現(xiàn)成的函數(shù)(drawoval)
2.這部要做的就是記錄棋子和五子連的判斷:
1.我們通過一個數(shù)組int給保存棋子,如果是0就是沒子,1表示是黑子,2表示白子。在每次重繪的時候遍歷這個數(shù)組顯示,這樣就可以保存棋子了。2.判斷五子連起來然后獲勝的算法: 這個算法是鑒戒例子上的:
private boolean isline(int x, int y, int xchange, int ychange, int color){
int tempx = xchange;int tempy = ychange;int count = 1;while(x + xchange >= 0 && y + ychange >= 0
&& color == chess1[x + xchange][y + ychange]){ count++;if(xchange!= 0){ } if(ychange!= 0){ if(ychange < 0){ xchange++;
}
}
}
} ychange--;ychange++;} else { xchange = tempx;ychange = tempy;while(xychange >= 0
} if(count >= 5){
} return true;return false;} else { && color == chess1[xychange]){ count++;if(xchange!= 0){ } if(ychange!= 0){
} if(ychange < 0){
} ychange--;ychange++;} else { xchange++;中心思想就是要判斷就要判斷8個方向,其中有的只是相反的方向,我們使用關(guān)于X,Y的相對的變化來判斷,并且使用count來計數(shù),如果到了5個就可以判斷勝利啦。
1.我的第三步就是時間的變化和一些鍵的設(shè)置
1.關(guān)于時間的變化主要是在于線程的使用,這里我們這個JFrame它繼承了Runnable 這個接口,不過我們要重寫Run函數(shù),這個run函數(shù)的代碼如下: public void run(){
if(this.second > 0){
while(true){
this.repaint();if(this.isblack){
this.ss1--;
if(this.ss1 == 0){
JOptionPane
.showMessageDialog(this, “黑方超時~~~~?¤游戲結(jié)束”);
this.message1=“0:0:0”;
{
“白方超時~~~~?¤?¤游戲結(jié)束”);this.message2=“0:0:0”;this.canplay = false;
{
{ }
this.ss2--;
if(this.ss2 == 0){
this.message1 = this.ss
1/ 3600 + “ : ”
+(this.ss1 / 60this.ss1 / 60 *
this.ss1=-1;
this.canplay = false;
}else if(this.ss1>0)3600 * 60)60this.ss2 / 3600 + “ : ”
+(this.ss2this.ss2 / 3600 * 60 * 60);
this.repaint();}else { }
try {
}
Thread.sleep(1000);e.printStackTrace();} catch(InterruptedException e){ 這個函數(shù)是用來事時間的變化,所以每操作以后就讓線程sleep(1000)就可以了,那樣就是一秒鐘。這樣就可以倒計時了。2.現(xiàn)在我們要點擊一個按鈕要它有響應(yīng)。
這里我們其實就沒用到什么button,那為什么會有反應(yīng)呢,因為我們通過鼠標的點擊范圍來確定要響應(yīng)什么函數(shù),這就是這里面的秘密.在public void mouseClicked(MouseEvent arg0)函數(shù)里有下面這些if的判斷
if(x1 >= 404 && x1 <= 473 && y1 >= 74 && y1 <= 103)if(x1 >= 404 && x1 <= 473 && y1 >= 127 && y1 <= 155)if(x1 >= 404 && x1 <= 473 && y1 >= 179 && y1 <= 208)if(x1 >= 404 && x1 <= 473 && y1 >= 286 && y1 <= 316)if(x1 >= 404 && x1 <= 473 && y1 >= 338 && y1 <= 367)if(x1 >= 404 && x1 <= 473 && y1 >= 390 && y1 <= 419)這就是為了確定鼠標的范圍,然后相對調(diào)用函數(shù)。
其他還有就是一些Debug處理,在程序已經(jīng)處理了,結(jié)果的還是蠻可以處理的,不過只能是人人對戰(zhàn)。
四、實驗心得與小結(jié)
這次試驗總的來說沒有想像中那么難,還有視屏的幫助,感覺起還是很容易動手的,不過由于自己沒上心,沒有做比較大的改動,最主要的人機的對戰(zhàn)沒做出來是滿遺憾的,不過通過這個試驗,讓我學(xué)習(xí)了不少的知識,比如雙緩沖,mouselistener 等許多許多的知識,還有關(guān)于五子棋算法的設(shè)計也是一部分。不管怎么說還是有學(xué)到知識的,沒什么改動,但對現(xiàn)有的知識的掌握還是很可以的。
五、指導(dǎo)教師評議
成績評定:
指導(dǎo)教師簽名:
第三篇:《JAVA語言》課程設(shè)計設(shè)計
《面向?qū)ο蟪绦蛟O(shè)計JAVA》課程設(shè)計大綱
課程名稱:面向?qū)ο蟪绦蛟O(shè)計JAVA 適用專業(yè):計算機及計算機相關(guān)專業(yè)
學(xué)時數(shù):20(上機實驗)學(xué) 分: 1 配套教材:《JAVA語言與面向?qū)ο蟪绦蛟O(shè)計》印旻 編著 清華大學(xué)出版社 大綱編寫者:周斌 編寫日期:2008.2
一、課程設(shè)計目的
1、課程設(shè)計的教學(xué)任務(wù)是讓學(xué)生通過動手動腦解決實際問題,是學(xué)生學(xué)完課程后進行 的一次全面的綜合訓(xùn)練,是一個非常重要的教學(xué)環(huán)節(jié),通過課程設(shè)計,使學(xué)生經(jīng)受一次綜合動用所學(xué)知識,解決實際問題的方法。
2、使學(xué)生掌握使用各種計算機資料和有關(guān)參考資料,提高學(xué)生的基本設(shè)計能力。
3、培養(yǎng)學(xué)生理論聯(lián)系實際和獨立思考的能力,并激發(fā)學(xué)生的實際開發(fā)創(chuàng)造的意識和能力。
二、課程設(shè)計要求
1、利用JAVA進行應(yīng)用程序的設(shè)計。
2、必須熟悉課程設(shè)計的各項內(nèi)容和要求,明確課程設(shè)計的目的、方法和步驟;
3、設(shè)計中必須獨立地地完成每一階段的設(shè)計任務(wù),禁止抄襲他人的設(shè)計成果;
4、所設(shè)計的程序必須滿足實際使用要求,編譯出可執(zhí)行的程序。
5、要求程序結(jié)構(gòu)簡單,功能齊全,使用方便。
三、課程設(shè)計內(nèi)容
課程設(shè)計題目:
1、已知銀行整存整取存款不同期限的年息利率分別為: 0.63% 期限一年
0.66% 期限二年
年息利率= 0.69% 期限三年 0.75% 期限五年
0.84% 期限八年
要求輸入存錢的本金和期限,求到期時能從銀行的到的利息與本金的合計。
程序如下:
import java.io.*;public class myWork1 { public static void main(String args[]){ try { int m,n;BufferedReader br=new BufferedReader(new InputStreamReader(System.in));System.out.print(“請輸入金額: ”);m=Integer.parseInt(br.readLine());System.out.print(“請輸入年限: ”);n=Integer.parseInt(br.readLine());System.out.println();switch(n){ case 1: System.out.println(“得到的總額為 ”+m*(1+n*0.0063));break;case 2: System.out.println(“得到的總額為 ”+m*(1+0.0066*n));break;case 3: System.out.println(“得到的總額為 ”+m*(1+0.0069*n));break;case 5: System.out.println(“得到的總額為 ”+m*(1+0.0075*n));break;case 8: System.out.println(“得到的總額為 ”+m*(1+0.0084*n));break;} } catch(IOException e){ System.out.println(e);} } } 截圖如下:
2、輸入n值,打印邊長為n的空心正六邊形,其邊由“*”組成。
3、編寫一個類,這個類同時求出n個學(xué)生成績的最高分、最低分、平均分以及超過平均分的人數(shù),并編寫主類完成:(1)輸入n個學(xué)生的成績;(2)調(diào)用此類進行統(tǒng)計;(3)輸出統(tǒng)計結(jié)果。
4、編程實現(xiàn)實時動態(tài)運行的模擬時鐘。以下題目選做:
5、編程實現(xiàn)約瑟夫問題。8個人站成一圈,從第1個人開始報數(shù),報到5的人出圈,第6個人再從1開始報。依次類推,求出圈的序列。
6、編程實現(xiàn)俄羅斯方塊游戲。
說明:可以自行選擇其他設(shè)計題目
四、編寫課程設(shè)計報告書
課程設(shè)計報告書要求:
1、文字敘述清楚,結(jié)構(gòu)結(jié)構(gòu)簡潔明了,理論正確,程序功能完備。
2、設(shè)計說明書要求文字工整,書寫整齊。
3、附參考資料名稱說明。
4、課程設(shè)計報告主要內(nèi)容: 1)題目 2)問題需求分析 3)總體設(shè)計 4)詳細設(shè)計
5)測試數(shù)據(jù)和調(diào)試報告 6)小結(jié)
五、成績評定方式
根據(jù)平時設(shè)計完成質(zhì)量和課程設(shè)計報告確定成績。分優(yōu)秀、良好、中等、及格、不及格五檔。
第四篇:Java課程設(shè)計報告
課 程 設(shè) 計
課程名稱 Java語言課程設(shè)計 題目名稱 人事管理系統(tǒng)的設(shè)計與實現(xiàn) 學(xué)生學(xué)院 應(yīng)用數(shù)學(xué)學(xué)院 專業(yè)班級 學(xué) 號 學(xué)生姓名 指導(dǎo)教師 劉科峰
2014 年 10 月 29
日 一.設(shè)計內(nèi)容
自學(xué)Swing圖形界面設(shè)計和數(shù)據(jù)庫程序設(shè)計。開發(fā)用于某單位的人事管理系統(tǒng)。該系統(tǒng)要求實現(xiàn)以下功能:
1.員工信息管理包括:員工信息一覽表、新員工的建立、修改 2.薪資福利管理:考勤與薪資的連動計算、薪資與福利的設(shè)置
3.考勤假期管理:考勤項目錄入, 實現(xiàn)考勤信息的查詢、統(tǒng)計、匯總 4.人事報表管理:按照員工性別,數(shù)目,薪酬自動生成相關(guān)報表, 可自定義統(tǒng)計分析條件并可對歷史報表進行管理。
設(shè)計亮點
1.null布局方式
Swing圖形界面設(shè)計中有很多布局方式,通過本次學(xué)習(xí)了解到了FlowLayout,BorderLayout,GridLayout以及null布局,就這四種布局方式而言,null布局的優(yōu)點在于可以將組建的位置精準到坐標值,可以把組件放到任意想放置的位置,另外可以通過null去設(shè)置組件的大小,相較于其他布局方式來說是一個很大的優(yōu)勢。但同時它的缺點在于不能根據(jù)Frame的大小變化而改變位置。
2.組件部分屬性的設(shè)計
Swing中有很多方法是用來實現(xiàn)組件屬性設(shè)置的,比如button.setVisible(false);按鈕通過調(diào)用這個方法實現(xiàn)不可見,這是我此次課程設(shè)計中的一個亮點,因為組件是沒有設(shè)置大小的方法的,只有依靠于相應(yīng)的布局方式才能改變它的大小,通過設(shè)置多幾個按鈕設(shè)為不可見,將所要可見按鈕實現(xiàn)大小以及位置的控制是一種很好的方法。
二、設(shè)計方案
1主界面(只列出界面設(shè)計方面的代碼)
JPanel panel=new JPanel();JTable table=null;JButton ibtn=new JButton(“員工信息”);JButton cbtn=new JButton(“考勤管理”);JButton mbtn=new JButton(“薪資管理”);JButton tbtn=new JButton(“人事報表”);ImageIcon rtou = new ImageIcon(“rentou.jpg”);
JLabel imgLabel=new JLabel(rtou);
//上面代碼定義了一個面板與四個標簽,并引入了一個圖片
panel.setLayout(new FlowLayout());//設(shè)置面板為流布局
panel.add(ibtn);panel.add(cbtn);panel.add(mbtn);panel.add(tbtn);panel.setBackground(Color.GRAY);
//將按鈕加到面板中,設(shè)置面板為灰色
this.add(imgLabel,BorderLayout.CENTER);this.add(panel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*圖片標簽以邊框布局放置在中間,將面板也以邊框布局放置在下面,可見,灰色,點擊關(guān)閉程序*/
(2)查詢員工界面(只列出界面設(shè)計方面的代碼)
Label idlabel = new JLabel(“ID”);JLabel namelabel = new JLabel(“姓名”);JLabel bumenlabel = new JLabel(“部門”);JLabel zhiweilabel = new JLabel(“職位”);
JTextField idfiled = new JTextField(8);JTextField namefield = new JTextField(8);JComboBox bumenbox =new JComboBox();JComboBox zhiweubox = new JComboBox();
JButton btn=new JButton(“查詢”);JButton ibtn=new JButton(“添加”)
JPanel spanel=new JPanel();JPanel vpanel=new JPanel();
/*定義和各個組件,4個標簽,兩個文本框,兩個復(fù)選框,兩個按鈕,兩個面板容器*/ spanel.setLayout(new FlowLayout());
vpanel.setLayout(new FlowLayout(FlowLayout.CENTER,45,25));
bumenbox.addItem(“");
bumenbox.addItem(”管理部“);
bumenbox.addItem(”生產(chǎn)部“);
bumenbox.addItem(”業(yè)務(wù)部“);
zhiweubox.addItem(”“);
zhiweubox.addItem(”部長“);
zhiweubox.addItem(”副部長“);
zhiweubox.addItem(”普工“);
spanel.add(idlabel);
spanel.add(idfiled);
spanel.add(namelabel);
spanel.add(namefield);
spanel.add(bumenlabel);
spanel.add(bumenbox);
spanel.add(zhiweilabel);
spanel.add(zhiweubox);
spanel.add(btn);
vpanel.add(ibtn);
spanel.setBackground(Color.GRAY);
vpanel.setBackground(Color.GRAY);
//將各個組件放進對應(yīng)面板,設(shè)置相關(guān)屬性
this.add(spanel,BorderLayout.NORTH);
this.add(vpanel,BorderLayout.SOUTH);
this.setBounds(300, 180, 600, 350);
this.setVisible(true);
this.getContentPane().setBackground(Color.GRAY);
//將面板以邊框布局放入框架中,設(shè)置屬性(3)增加員工信息界面
JPanel panel=new JPanel();
JLabel timeLabel=new JLabel(”時間“);JLabel allnumLabel=new JLabel(”員工總數(shù)“);
JLabel staffMoLabel=new JLabel(”考勤“);JLabel entryLabel=new JLabel(”全勤“);
JLabel quitLabel=new JLabel(”缺勤“);JLabel mwLabel=new JLabel(”性別比例“);
JLabel manLabel=new JLabel(”男“);
JLabel womanLabel=new JLabel(”女“);JLabel proportionLabel=new JLabel(”男女比例“);JLabel distributionLabel=new JLabel(”人員部門分布“);JLabel mdpLabel=new JLabel(”管理部“);
JLabel pdpLabel=new JLabel(”生產(chǎn)部“);JLabel bdpLabel=new JLabel(”業(yè)務(wù)部“);JLabel xmLabel=new JLabel(”項目“);JLabel xzLabel=new JLabel(”細則“);JLabel stLabel=new JLabel(”數(shù)據(jù)統(tǒng)計“);
JTextField timeFiled = new JTextField(8);
JTextField allnumFiled = new JTextField(8);JTextField entryFiled = new JTextField(8);JTextField quitFiled = new JTextField(8);JTextField manFiled = new JTextField(8);JTextField womanFiled = new JTextField(8);JTextField proportionFiled = new JTextField(8);JTextField mdpFiled = new JTextField(8);JTextField pdpFiled = new JTextField(8);JTextField bdpFiled = new JTextField(8);// 定義所需組件
public Selectrenshi(String tablename){
super(”人事管理“);
panel.setLayout(null);
panel.setBackground(Color.GRAY);
panel.add(xmLabel);
panel.add(xzLabel);
panel.add(stLabel);
panel.add(timeLabel);
panel.add(timeFiled);
panel.add(allnumLabel);
panel.add(allnumFiled);
panel.add(staffMoLabel);
panel.add(entryLabel);
panel.add(entryFiled);
panel.add(quitLabel);
panel.add(quitFiled);
panel.add(mwLabel);
panel.add(manLabel);
panel.add(manFiled);
panel.add(womanLabel);
panel.add(womanFiled);
panel.add(proportionLabel);
panel.add(proportionFiled);
panel.add(distributionLabel);
panel.add(mdpLabel);
panel.add(mdpFiled);
panel.add(pdpLabel);
panel.add(pdpFiled);
panel.add(bdpLabel);
panel.add(bdpFiled);
//將組件加到相應(yīng)面板中
xmLabel.setBounds(120,20,100,30);
xzLabel.setBounds(240,20,100,30);
stLabel.setBounds(360,20,100,30);
timeLabel.setBounds(120,50,100,30);
timeFiled.setBounds(360,50,100,30);
allnumLabel.setBounds(120,100,100,30);
allnumFiled.setBounds(360,100,100,30);
staffMoLabel.setBounds(120,150,100,30);
entryLabel.setBounds(240,150,100,30);
entryFiled.setBounds(360,150,100,30);
quitLabel.setBounds(240,200,100,30);
quitFiled.setBounds(360,200,100,30);
mwLabel.setBounds(120,250,100,30);
manLabel.setBounds(240,250,100,30);
manFiled.setBounds(360,250,100,30);
womanLabel.setBounds(240,300,100,30);
womanFiled.setBounds(360,300,100,30);
proportionLabel.setBounds(240,350,100,30);
proportionFiled.setBounds(360,350,100,30);
distributionLabel.setBounds(120,400,100,30);
mdpLabel.setBounds(240,400,100,30);
mdpFiled.setBounds(360,400,100,30);
pdpLabel.setBounds(240,450,100,30);
pdpFiled.setBounds(360,450,100,30);
bdpLabel.setBounds(240,500,100,30);
bdpFiled.setBounds(360,500,100,30);
//采用null布局,設(shè)置組建坐標值
this.add(panel,BorderLayout.CENTER);
this.setBounds(300, 100, 600, 600);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().setBackground(Color.GRAY);
//將面板放入框架,設(shè)置相應(yīng)屬性(4)員工考勤界面
JLabel idlabel = new JLabel(”ID“);JComboBox idbox =new JComboBox();CheckTable model = null;
JButton wbtn=new JButton(”修改“);
JButton cbtn=new JButton(”查詢“);JButton mbtn=new JButton(”創(chuàng)建薪資表“);JButton rbtn=new JButton(”創(chuàng)建人事表“);
JScrollPane scrollpane = null;JPanel spanel=new JPanel();JPanel vpanel=new JPanel();JTable table=null;spanel.add(idbox);panel.add(wbtn);spanel.add(cbtn);vpanel.add(mbtn);vpanel.add(rbtn);spanel.setBackground(Color.GRAY);vpanel.setBackground(Color.GRAY);this.add(spanel,BorderLayout.NORTH);this.add(vpanel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY);
(5)選擇考勤表界面
JLabel checklabel = new JLabel(”選擇考勤表“);JLabel newlabel = new JLabel(”創(chuàng)建考勤表“);JComboBox timebox =new JComboBox();JTextField newfield = new JTextField();JButton btn=new JButton(”確認“);JButton nbtn=new JButton(”創(chuàng)建");JPanel spanel=new JPanel();spanel.add(checklabel);
spanel.add(timebox);
spanel.add(btn);
spanel.add(newlabel);
spanel.add(newfield);
spanel.add(nbtn);
checklabel.setBounds(30,90,100,30);
timebox.setBounds(180,90,100,30);
btn.setBounds(360,90,100,30);
newlabel.setBounds(30,200,100,30);
newfield.setBounds(180,200,100,30);
nbtn.setBounds(360,200,100,30);
this.add(spanel);
this.setBounds(300, 180, 600, 350);
this.setVisible(true);
三、結(jié)果和數(shù)據(jù)處理
四、結(jié)論
1.Swing圖形界面
圖形用戶界面(GUI)是程序不可或缺的一部分,它便于用戶和程序的交互。在Swing界面中是以Frame為框架,采用合理的布局方式(FlowLayout,BorderLayout,GridLayout,null),將Panel加入框架之中,而實現(xiàn)界面的各個組件將調(diào)用各種方法設(shè)置自身屬性實行可視化界面以及加入到面板之中。再通過事件監(jiān)聽器實現(xiàn)事件的監(jiān)聽預(yù)處理機制。
2.數(shù)據(jù)庫
在這次課程設(shè)計中哦我主要負責Swing圖像界面,對于數(shù)據(jù)庫只做了最簡單的了解。程序中采用了最流行的關(guān)系型數(shù)據(jù)庫mysql,雪化了mysql的建立,刪除,與修改以及使用sql語言對數(shù)據(jù)庫進行一些簡單的操作,將按鈕等設(shè)置的監(jiān)聽事件與數(shù)據(jù)庫相連接。
五、問題與討論
1.組件的方法調(diào)用
在這次課程設(shè)計中,用到了很多的組件,例如Button,Jlabel,TextField,ComBox,等。Swing圖形界面也確實提供了很多方法去設(shè)置相關(guān)組件的屬性,例如label.setVisible(false);設(shè)置標簽不可見等很多方法,只要查看API文檔幾乎就能實現(xiàn)很多功能,但是對于按鈕等最常見的組件來說設(shè)置大小如果不依靠相關(guān)布局方式很難設(shè)置,我在程序中之所以運用了很多的bull布局方式就是為了實現(xiàn)組件大小的設(shè)置,如果說能有一個方法直接設(shè)置組件大小而不受其他組件或容器影響就能使代碼很簡潔了。2.相對布局
在編寫圖像界面的程序的時候,我用了很多的布局方式,有FlowLayout,BorderLayout,GrirLayout,null等,其中null布局用的最多。null布局的優(yōu)點在于可以將組建的位置精準到坐標值,可以把組件放到任意想放置的位置,另外可以通過null去設(shè)置組件的大小,相較于其他布局方式來說是一個很大的優(yōu)勢。但同時它的缺點在于不能根據(jù)Frame的大小變化而改變位置。其他三種布局方式雖然實現(xiàn)了歲Frame大小變動而改變組件大小及位置但是不容易控制,如果null布局能實現(xiàn)相對布局就是很好的一種布局方式了。
第五篇:java課程設(shè)計報告
《Java語言程序設(shè)計》
題 目:指導(dǎo)老師:姓 名:專 業(yè):班 級:日 期:課程設(shè)計報告
目 錄
一、系統(tǒng)總體設(shè)計.......................................1
(一)設(shè)計目標及完成功能..............................1
(二)系統(tǒng)結(jié)構(gòu)設(shè)計...................................1
二、數(shù)據(jù)庫設(shè)計........................................1
三、詳細設(shè)計..........................................1(一)界面設(shè)計........................................1(二)系統(tǒng)設(shè)計........................................2(三)關(guān)鍵技術(shù)及算法..................................2
四、測試..............................................2
五、安裝使用說明.......................................2 總結(jié)(體會)..........................................2 參考文獻:............................................2
《Java語言程序設(shè)計》課程設(shè)計報告
一、系統(tǒng)總體設(shè)計
(一)設(shè)計目標及完成功能
此部分可以包括如下內(nèi)容:
1.窗口功能說明:設(shè)計了幾個窗口,分別實現(xiàn)什么功能.2.菜單欄或工具欄說明:如果設(shè)計了菜單或工具欄,分別說明包括哪些項及其各自實現(xiàn)什么操作.……
(二)系統(tǒng)結(jié)構(gòu)設(shè)計
說明:要繪出系統(tǒng)結(jié)構(gòu)圖
二、數(shù)據(jù)庫設(shè)計
必須包含以下內(nèi)容:E-R圖(說明所有實體及其屬性)、表結(jié)構(gòu)列表(字段名、類型、主鍵、備注等)。
沒有用到數(shù)據(jù)庫的不用寫此部分
三、詳細設(shè)計
(一)界面設(shè)計
界面抓圖,圖要有編號和標題(格式:圖1 主界面圖),位于圖的下方居中對齊。
《Java語言程序設(shè)計》課程設(shè)計報告
(二)系統(tǒng)設(shè)計
1.共設(shè)計了幾個類或接口,是否有繼承關(guān)系,各實現(xiàn)什么功能,繪圖(列表)說明。
2.列表說明各類的方法及其功能。
(三)關(guān)鍵技術(shù)及算法
使用的主要算法分析、關(guān)鍵技術(shù)說明。如數(shù)據(jù)庫連接技術(shù)、加密解密算法等。
四、測試
五、安裝使用說明
1.系統(tǒng)配置說明。是否需要配置數(shù)據(jù)源或安裝補丁包、導(dǎo)入數(shù)據(jù)庫等。
2.登錄的用戶名、密碼。3.其他特殊說明。
總結(jié)(體會)
(談?wù)劚敬握n程設(shè)計的心得體會)
參考文獻:
[1] 竇萬峰.軟件工程方法與實踐[M].機械工業(yè)出版社,2009 [2] 李兆鋒,張得生.Java Web項目開發(fā)案例精粹[M].電子工業(yè)出版社,2010 [3] 沈澤剛,秦玉平.Java Web編程技術(shù)[M].清華大學(xué)出版社,2009
《Java語言程序設(shè)計》課程設(shè)計報告
包括書籍、網(wǎng)站、論壇等。
說明:(以下內(nèi)容作為要求)
正文部分一律用小四號字,宋體,1.5倍行距。一級大標題黑體四號字靠左,加粗。二級大標題黑體四號靠左,不加粗。
參考文獻:
(要求:五號字,宋體,左對齊,懸掛縮進,單倍行距。按作者、書名、出版社、出版時間格式逐一列出)