Java課程設(shè)計報告-14_第1頁
Java課程設(shè)計報告-14_第2頁
Java課程設(shè)計報告-14_第3頁
Java課程設(shè)計報告-14_第4頁
Java課程設(shè)計報告-14_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

PAGE19煙臺工程職業(yè)技術(shù)學(xué)院系專業(yè)級課程設(shè)計(論文)題目:Java五子棋游戲設(shè)計姓名學(xué)號指導(dǎo)教師(簽名)二○一零年七月十二日PAGE1Java五子棋游戲設(shè)計——xxx摘要五子棋游戲大家都比較熟悉,且老少皆宜,我個人也很喜歡五子棋游戲,易學(xué)易操作,使用Java編寫一個五子棋游戲,閑暇之時既可以開動智力又可以得到愉悅。程序?qū)崿F(xiàn)選擇對弈桌及角色(執(zhí)黑、執(zhí)白、觀看)。在游戲界面,有開始,退出(游戲未結(jié)束、點退出自動判負);發(fā)言及顯示區(qū);用戶列表區(qū);棋盤繪制區(qū)。前言Java是由美國的sunmicrosystems公司發(fā)展出來的一套面向?qū)ο蟪绦蛘Z言,因為它的面向?qū)ο?,分散運算,跨平臺等等特性,又支持多線程。使得許多用過的人都愛不釋手。Java既是一種程序設(shè)計語言,也是一個完整的平臺。作為一種程序語言,它簡潔、面向?qū)ο?、安全、健壯,以及適用于Internet技術(shù);而作為一個平臺(JRE,JavaRuntimeEnvironment,Java運行環(huán)境或者說是Java虛擬機),對于符合Sun公司Java標準的應(yīng)用程序,都可以在Java平臺上正確運行,與程序運行的操作系統(tǒng)無關(guān)。Java發(fā)展到今天,已從編程語言發(fā)展成為全球第一大通用開發(fā)平臺。Java技術(shù)已被計算機行業(yè)主要公司所采納。1999年,Sun公司推出了以Java2平臺為核心的J2EE、J2SE和J2ME三大平臺。隨著三大平臺的迅速推進,全球形成了一股巨大的Java應(yīng)用浪潮。 這個五子棋游戲正是用這個平臺做的,在實踐中充分體現(xiàn)出了Java面向?qū)ο蠼o我們帶來的方便。多用戶聊天程序也讓我體會到了Java多線程的強大功能。一設(shè)計思路、(一)、工作原理圖(二)、功能的規(guī)劃1.建立一個棋盤類,繪制棋盤的樣式,在棋盤面板上添加各種按鈕及相應(yīng)胡觸發(fā)事件。同時注意面板的設(shè)計,使面板設(shè)計的盡量胡的合理美觀。a.棋盤的繪制publicvoiddraw_qipan(GraphicsG)//畫棋盤15*15{ G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(inti=1;i<16;i++){ G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300);}}b.添加按鈕與按鈕胡規(guī)劃Buttonb1=newButton("開始"); Buttonb2=newButton("重置游戲"); LabellblWin=newLabel(""); CheckboxckbHB[]=newCheckbox[3]; Buttonexist=newButton("退出"); publicvoidinit(){ ckbHB[0]=newCheckbox("執(zhí)白",ckgHB,false); ckbHB[1]=newCheckbox("執(zhí)黑",ckgHB,false); ckbHB[2]=newCheckbox("觀看",ckgHB,false); }C.鼠標棋子胡相應(yīng)觸發(fā)事件publicvoidmouseClicked(MouseEvente){ Graphicsg=getGraphics(); intx1,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ā)事件publicvoidactionPerformed(ActionEvente){ Graphicsg=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.編寫一個功能判斷落子的位置及畫出相應(yīng)的黑白棋子publicvoidset_Qizi(intx,inty)//落子{ if(intGame_Start==0)//判斷游戲未開始{ return;} if(intGame_Body[x/20][y/20]!=0){ return;} Graphicsg=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.添加用戶聊天功能NetchatClientchat=newNetchatClient();chat.frame();chat.setVisible(true);二、具體實現(xiàn)(一)、創(chuàng)建棋盤類PublicclassWcyChessextendsAppletimplementsActionListener,MouseListener,MouseMotionListener,ItemListener{ intcolor_Qizi=0;//旗子的顏色標識0:白子1:黑子 intintGame_Start=0;//游戲開始標志0未開始1游戲中 intintGame_Body[][]=newint[16][16];//設(shè)置棋盤棋子狀態(tài) intm=-1; Buttonb1=newButton("開始"); Buttonb2=newButton("重置游戲"); LabellblWin=newLabel(""); CheckboxckbHB[]=newCheckbox[3]; Buttonexist=newButton("退出"); CheckboxGroupckgHB=newCheckboxGroup(); NetchatClientchat=newNetchatClient(); publicvoidinit(){ 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]=newCheckbox("執(zhí)白",ckgHB,false); ckbHB[0].setBounds(320,20,60,30); ckbHB[1]=newCheckbox("執(zhí)黑",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); 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);} publicvoiditemStateChanged(ItemEvente){ if(ckbHB[0].getState())//選擇黑子還是白子{ color_Qizi=0; } else{ color_Qizi=1;}} publicvoidmousePressed(MouseEvente){} publicvoidmouseClicked(MouseEvente){ Graphicsg=getGraphics(); intx1,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);} publicvoidactionPerformed(ActionEvente){ Graphicsg=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;}} publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidmouseDragged(MouseEvente){} publicvoidmouseMoved(MouseEvente){} publicvoidpaint(Graphicsg){ draw_qipan(g);}(二)、判斷輸贏功能實現(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;}//判斷輸贏程序?qū)崿F(xiàn)在詳細過程 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) 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;} 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; }} 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; } } if(t>4){ returntrue;} else{ returnfalse; }}(三)、實現(xiàn)聊天功能類packageNetchatClient;importJava.awt.*;importJava.awt.event.*;importJ.*;importJava.io.*;importJavax.swing.*;publicclassNetchatClientextendsFrame{ Framex=newFrame("liaotianchengxu");TextFieldtf=newTextField();TextAreata=newTextArea();Sockets=null;DataOutputStreamdos=null;publicstaticvoidmain(String[]args){newNetchatClient().frame();}publicvoidframe(){System.out.println("frame()");setLocation(20,400);setSize(300,300);add(tf,BorderLayout.SOUTH);add(ta,BorderLayout.NORTH);pack();setVisible(true);connect();this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventarg0){cconnect();System.exit(0);}});addWindowListener(newWindowAdapter()//窗口適配器{ publicvoidwindowClosing(WindowEvente){ System.exit(0);//程序退出}});tf.addActionListener(newnclistener());}publicvoidconnect(){System.out.println("connnect()..");try{s=newSocket("",8888);//設(shè)置客戶端的IP和端口dos=newDataOutputStream(s.getOutputStream());}catch(UnknownHostExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicvoidcconnect(){try{dos.close();s.close();}catch(IOExceptione){e.printStackTrace();}}publicclassnclistenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){Stringst=tf.getText();ta.setText(st);tf.setText("");try{dos.writeUTF(st);dos.flush();}catch(IOExceptione1){e1.printStackTrace();}}}}三、測試結(jié)果(一)、進入游戲的界面分析:游戲開始的界面有三個選擇項,用戶可以選擇相應(yīng)的角色,選擇完畢后點擊開始進入游戲。用戶也可以在下面的聊天框中進行聊天。(二)選擇角色,點擊開始,開始下棋分析:首先達到五個棋子連在一塊的贏了,并在紅色區(qū)域顯示誰贏了?。ㄈ⑾峦旰簏c擊重新開始分析:下完一盤后游戲停止,點擊重新開始,界面回到初始界面,選擇角色繼續(xù)游戲.(四)、游戲過程中退出,自動判輸分析:在下棋的過程當(dāng)中誰中途退出,即點擊退出,系統(tǒng)自動判斷誰輸(五)、改進想法這個系統(tǒng)基本上實現(xiàn)了要求但是在有些方面還不夠完善。1.觀看角色點擊后不會出發(fā)什么事件,雖然觀看者并不需要做什么但是點擊之后并沒有發(fā)生任何反應(yīng)總感覺缺點什么。想加個什么功能,但是又不知道加什么才不至于畫蛇添足。2.問題比較大的可能是聊天功能了,本來聊天面板應(yīng)該和棋盤面板在同一個面板上面,但是聊天功能的程序是寫在了另一個類里,并且那個類是繼承了Frame類的,是一個Application程序,而棋盤是一個Applet程序,所以當(dāng)我添加這個類到Applet面板上并不能顯示,所以我就打包那個NetchatClient類,在棋盤類中加載這個類,并調(diào)用該類的方法才實現(xiàn)了聊天功能。3.聊天功能本身也還不夠完善,因為每次發(fā)送聊天的內(nèi)容后都會覆蓋掉原來的內(nèi)容,這使得用戶不能很直觀的看到聊天的內(nèi)容。但是在修改的過程中出現(xiàn)了許多的問題,所以也就將就者先用了。四、設(shè)計體會與小結(jié)這個課設(shè)題對我來說有一定的挑戰(zhàn)性,因為我自己也不知道自己到底學(xué)到了一個什么樣的境界。但可以肯定,這個課設(shè)題的要求絕對在我的能力范圍以上。之所以選擇這個題目是想逼著自己去查更多的資料,學(xué)到更多的東西。結(jié)果也確實是這樣的,我在這次課設(shè)中學(xué)到了不少東西,也理解了許多原來不理解的東西。盡管這個系統(tǒng)做的并不是那么的完善。對于Java中的引用,初始化類等,開始我并不是非常的理解,知道就這么做就能實現(xiàn)相應(yīng)的功能了,并沒有很深刻的去理解它為什么要這么做。但是真正的要用Java去做一個東西不理解它是不行的,而且其間這課設(shè)涉及到了Java中的絕大多數(shù)的知識點,如Java圖形用戶界面設(shè)計、Java的異常處理機制、Java中的多線程程序設(shè)計、Java輸入輸出流,要應(yīng)用這些東西更要求我去好好理解Java的這些規(guī)則。好在有一定的C++基礎(chǔ)Java與C++語法類似,并把C++中一些較低級和較難以理解的功能都去掉了,如多繼承、指針等,同時Java增強了部分功能。所以理解起來也比較容易。但是理解了Java的規(guī)則要把這個課設(shè)做好也不是那么容易,最難的部分是如何實現(xiàn)各個功能的劃分和類的通訊問題。我在這方面就遇到了不少的問題??偨Y(jié)這次課設(shè),我還是收獲不少。雖然界面也不是很美觀,有點功能間的連接做的也不是特別的好,但是我能認識到自己的不足,并且在跟同學(xué)的交流中也學(xué)到了一些他們的設(shè)計思路,也知道今后要加強哪些方面的知識。結(jié)束語首先感謝陳婭冰老師,在整個設(shè)計過程中,出現(xiàn)過很多的難題,但都在老師的幫助下順利解決了,通過設(shè)計我也更加鞏固了知識,了解問題,改正不足。六、參考文獻1.葉核亞編著、陳道蓄主審.Java課程設(shè)計實用教程(第三版)北京.電子工業(yè)出版社2.柳西玲.許斌編著.Java語言應(yīng)用開發(fā)基礎(chǔ).北京:清華大學(xué)出版社3.丁振凡Java語言實用教程:北京郵電大學(xué)出版社4.七、附錄(代碼)NetchatClient.javapackageNetchatClient;importjava.awt.*;importjava.awt.event.*;import.*;importjava.io.*;importjavax.swing.*;publicclassNetchatClientextendsFrame{ Framex=newFrame("liaotianchengxu");TextFieldtf=newTextField();TextAreata=newTextArea();Sockets=null;DataOutputStreamdos=null;publicstaticvoidmain(String[]args){newNetchatClient().frame();}publicvoidframe(){System.out.println("frame()");setLocation(20,400);setSize(300,300);add(tf,BorderLayout.SOUTH);add(ta,BorderLayout.NORTH);pack();setVis

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論