欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      java五子棋游戲_控制臺(tái)_總結(jié)報(bào)告(推薦五篇)

      時(shí)間:2019-05-15 09:43:14下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《java五子棋游戲_控制臺(tái)_總結(jié)報(bào)告》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《java五子棋游戲_控制臺(tái)_總結(jié)報(bào)告》。

      第一篇:java五子棋游戲_控制臺(tái)_總結(jié)報(bào)告

      總結(jié)

      一、目的:

      1、完成瘋狂java講義第四章作業(yè)

      2、提升代碼能力

      3、熟悉java語(yǔ)言

      二、環(huán)境:

      Windows8.1系統(tǒng)、jdk1.8、記事本(需要把文件擴(kuò)展名改成java)

      三、遇到的問(wèn)題:

      1、錯(cuò)誤需要為class、interface或enum的問(wèn)題

      這個(gè)問(wèn)題,經(jīng)調(diào)試發(fā)現(xiàn)是因?yàn)樽⑨尩臅r(shí)候使用了嵌套注釋?zhuān)丛诳缧凶⑨?* */里面添加了跨行注釋

      2、如何提取控制臺(tái)輸入的問(wèn)題

      這個(gè)問(wèn)題,根據(jù)書(shū)上例子,采用bufferedreader解決,具體可以參見(jiàn)api文檔.3、斜方向棋子的檢測(cè)問(wèn)題

      這個(gè)問(wèn)題,解決它所需要的算法,著實(shí)讓我頭疼了一下.因?yàn)槲沂且云灞P(pán)左邊第一列為基準(zhǔn)進(jìn)行斜上方和斜下方的檢測(cè),以及以棋盤(pán)最后一列為基準(zhǔn)進(jìn)行斜上方和斜下方的檢測(cè).第一列的檢測(cè)會(huì)好做很多,因?yàn)橹恍枰獌蓪忧短譮or循環(huán)的i和j相加或相減就可以實(shí)現(xiàn)斜方向的遞進(jìn).而以最后一列的,則需要讓兩層嵌套for循環(huán)i和j的初始值設(shè)定為棋盤(pán)大小,然后遞減.這就導(dǎo)致無(wú)法直接用i和j相加或相減來(lái)實(shí)現(xiàn)遞進(jìn).我的解決辦法是引入額外的變量reduce(具體詳見(jiàn)源碼),從0開(kāi)始遞增,這樣就可以用i和reduce的相加或相減來(lái)實(shí)現(xiàn)遞進(jìn).四、所做的內(nèi)容: 和大多數(shù)五子棋游戲代碼一樣,我也是采用一個(gè)二維數(shù)組board來(lái)作為棋盤(pán).同時(shí)采用一個(gè)全局變量boardsize來(lái)指定這個(gè)二維數(shù)組的大小,類(lèi)似于這樣:board[boardsize][boardsize].然后使用水平、豎直、斜方向來(lái)檢測(cè)游戲是否出現(xiàn)結(jié)果。

      有棋盤(pán)初始化函數(shù),對(duì)二維數(shù)組board[][]進(jìn)行賦值.有棋盤(pán)打印函數(shù)實(shí)現(xiàn)棋盤(pán)的顯示.一個(gè)棋子輸入函數(shù).一個(gè)勝負(fù)檢測(cè)函數(shù).一個(gè)信息輸出函數(shù).然后在main函數(shù)里面采用while循環(huán)實(shí)現(xiàn)游戲的流程.列舉幾個(gè)很有用的變量:

      Board[][];//字符串型,作為棋盤(pán)的二維數(shù)組,是全局變量

      Boardsize;//int型,控制棋盤(pán)大小,是全局變量

      E_o_t;//布爾變量,用來(lái)判斷main函數(shù)中的while循環(huán)是否結(jié)束.即實(shí)現(xiàn)游戲是否結(jié)束功能.W_steps,B_steps;//int型,用來(lái)記錄白棋,黑棋連在一起的棋子的個(gè)數(shù),它們中的任何一個(gè)值達(dá)到5,則代表相應(yīng)的棋手贏了.Reduce;//int型,在勝負(fù)檢測(cè)函數(shù)中斜方向的檢測(cè)用到,前面用介紹.控制臺(tái)用到的命令:

      Javac;//用來(lái)編譯記事本寫(xiě)的程序.Java;//用來(lái)執(zhí)行編譯過(guò)的程序

      五、總結(jié):

      這次的作業(yè),感覺(jué)對(duì)自己的代碼能力有一定的提升,同時(shí),對(duì)java編程有了更深的認(rèn)識(shí), 同時(shí)了解到在java編程中,幾乎所有的全局變量和方法函數(shù),需要被定義成static.也認(rèn)識(shí)到j(luò)ava提供的一些方法函數(shù)功能十分強(qiáng)大,例如bufferedreader.六、源碼:

      importjava.io.InputStreamReader;importjava.io.BufferedReader;public class test2{ private static String[][] board;private static intboard_size=16;

      private static boolean PLAYER=true;//棋手,默認(rèn)白棋先下.false代表黑棋,true代表白棋 private static booleane_o_n=true;//作為循環(huán)(游戲)是否結(jié)束的依據(jù),意思為end or not.public static void board_init(){ board=new String[board_size][board_size];for(inti=0;i

      for(int j=0;j

      board[i][j]=“+”;

      }

      }

      }

      public static void board_print(){ for(inti=0;i

      if(i==0){

      for(intbou=0;bou

      if(bou==0)

      System.out.print(bou+“-------”);

      else if(bou>=1&&bou<=9)

      System.out.print(“0”+bou+“-”);

      else

      System.out.print(bou+“-”);

      }

      System.out.print(“n”);

      }

      for(int j=0;j

      if(j==0){

      System.out.print(i+1+“t”+board[i][j]);

      }

      else

      System.out.print(“-”+board[i][j]);

      } } System.out.print(“n”);} for(intbou=0;bou

      if(bou==0)

      System.out.print(“--------”);

      else if(bou>=1&&bou<=9)

      System.out.print(“0”+bou+“-”);

      else

      System.out.print(bou+“-”);

      }

      System.out.print(“n”);

      //實(shí)現(xiàn)棋子輸入并調(diào)換棋手

      public static void qizi_input(inta,int b){

      int x=a-1;

      int y=b-1;

      if(x>=0&&y=0&&y

      if(true==PLAYER){

      board[x][y]=“●”;

      PLAYER=false;

      }

      else{

      } } else board[x][y]=“○”;PLAYER=true;

      System.out.println(“【棋子必須落在棋盤(pán)上且該位置沒(méi)有已下的棋子!】”);

      } public static void WINNERis(){ //實(shí)現(xiàn)判斷勝負(fù)方法并輸出輸贏信息

      intB_steps=0;intW_steps=0;for(inti=0;i

      for(int j=0;j

      if(board[i][j]==“●”){

      W_steps++;

      }

      else{

      W_steps=0;} if(board[i][j]==“○”){ B_steps++;} else{ B_steps=0;} if(5==W_steps){ System.out.print(“【白棋贏了O(∩_∩)O!黑棋輸了~(╯﹏╰)~】”);e_o_n=false;break;} if(5==B_steps){

      System.out.print(“【黑棋贏了O(∩_∩)O!白棋輸了~(╯﹏╰)~】”);

      e_o_n=false;

      break;

      } } W_steps=0;B_steps=0;

      }

      for(int j=0;j

      for(inti=0;i

      if(board[i][j]==“●”){ W_steps++;} else{ W_steps=0;} if(board[i][j]==“○”){ B_steps++;} else{ B_steps=0;} if(5==W_steps){ System.out.print(“【白棋贏了O(∩_∩)O!黑棋輸了~(╯﹏╰)~】”);e_o_n=false;break;}

      “);

      ”);

      if(5==B_steps){

      System.out.print(“【黑棋贏了O(∩_∩)O!白棋輸了~(╯﹏╰)~】”);

      e_o_n=false;

      break;

      } } W_steps=0;B_steps=0;

      } for(inti=0;i

      for(int j=0;j

      if(i+j

      if(board[i+j][j]==“●”){ W_steps++;} else{ W_steps=0;} if(board[i+j][j]==“○”){ B_steps++;} else{ B_steps=0;} if(5==W_steps){ System.out.print(“【白棋贏了O(∩_∩)O!黑棋輸了~(╯﹏╰)~】 e_o_n=false;break;} if(5==B_steps){

      System.out.print(”【黑棋贏了O(∩_∩)O!白棋輸了~(╯﹏╰)~】

      e_o_n=false;

      break;

      } } else

      continue;} for(int j=0;j

      if(board[i-j][j]==“●”){

      “);

      ”);

      W_steps++;} else{ W_steps=0;} if(board[i-j][j]==“○”){ B_steps++;} else{ B_steps=0;} if(5==W_steps){

      System.out.print(“【白棋贏了O(∩_∩)O!黑棋輸了~(╯﹏╰)~】 e_o_n=false;break;} if(5==B_steps){ System.out.print(”【黑棋贏了O(∩_∩)O!白棋輸了~(╯﹏╰)~】

      e_o_n=false;

      break;

      }

      }

      else

      continue;}

      W_steps=0;B_steps=0;

      } for(inti=board_size-2;i>0;i--){ //實(shí)現(xiàn)最右列的斜方向的判斷

      int reduce=0;for(int j=board_size-1;j>0;j--){

      if(i-reduce>0){

      if(board[i-reduce][j]==“●”){ W_steps++;} else{ W_steps=0;} if(board[i-reduce][j]==“○”){ B_steps++;}

      “);

      ”);

      “);

      ”);

      else{ B_steps=0;} if(5==W_steps){

      System.out.print(“【白棋贏了O(∩_∩)O!黑棋輸了~(╯﹏╰)~】 e_o_n=false;break;} if(5==B_steps){

      System.out.print(”【黑棋贏了O(∩_∩)O!白棋輸了~(╯﹏╰)~】

      e_o_n=false;

      break;

      }

      reduce++;} else

      continue;} reduce=0;for(int j=board_size-1;j>0;j--){ if(board_size>i+reduce){

      if(board[i+reduce][j]==“●”){

      W_steps++;

      }

      else{

      W_steps=0;

      }

      if(board[i+reduce][j]==“○”){

      B_steps++;

      }

      else{

      B_steps=0;

      }

      if(5==W_steps){

      System.out.print(“【白棋贏了O(∩_∩)O!黑棋輸了~(╯﹏╰)~】

      e_o_n=false;break;} if(5==B_steps){ System.out.print(”【黑棋贏了O(∩_∩)O!白棋輸了~(╯﹏╰)~】

      e_o_n=false;

      break;

      }

      reduce++;

      }

      else

      continue;

      }

      W_steps=0;

      B_steps=0;

      }

      }

      public static void INFO_SHOW(){ //顯示棋盤(pán)及必要信息:落子方重新開(kāi)始退出游戲

      System.out.println(“【輸入格式為:‘1,1’或者‘88,99’】”);

      if(true==PLAYER)

      System.out.print(“【想重新開(kāi)始嗎?請(qǐng)輸入暗號(hào)88,88】【想退出游戲嗎?請(qǐng)輸入暗號(hào)66,66】n【現(xiàn)在落子方是白棋:”);

      else

      System.out.print(“【想重新開(kāi)始嗎?請(qǐng)輸入暗號(hào)88,88】【想退出游戲嗎?請(qǐng)輸入暗號(hào)66,66】n【現(xiàn)在落子方是黑棋:”);}

      public static void main(String[] args)throws java.io.IOException {

      /**

      **實(shí)現(xiàn)整個(gè)邏輯流程的實(shí)現(xiàn),**

      **黑白兩方的步數(shù)統(tǒng)計(jì)

      **勝負(fù)信息輸出*/

      test2 WUZIQI= new test2();//創(chuàng)建對(duì)象

      System.out.print(“【控制臺(tái)五子棋,超高逼格版】n【默認(rèn)白棋先下,你無(wú)法改變,這就是命!】n【請(qǐng)務(wù)必根據(jù)指示操作】n”);

      WUZIQI.board_init();

      WUZIQI.board_print();

      //實(shí)現(xiàn)電腦控制臺(tái)的輸入讀取

      BufferedReader P_INPUT= new BufferedReader(new InputStreamReader(System.in));

      String str_input= null;

      //循環(huán)體實(shí)現(xiàn)游戲框架

      while(e_o_n){

      INFO_SHOW();

      }

      } str_input=P_INPUT.readLine();String[] posStrArr=str_input.split(“,”);intxPos=Integer.parseInt(posStrArr[0]);intyPos=Integer.parseInt(posStrArr[1]);if(88==xPos&&88==yPos){ WUZIQI.board_init();continue;} if(66==xPos&&66==yPos){ e_o_n=false;continue;} qizi_input(xPos,yPos);WUZIQI.board_print();WINNERis();System.out.println(“n【游戲結(jié)束,再見(jiàn)哦,親!】”);

      }

      第二篇:Java五子棋實(shí)現(xiàn)報(bào)告

      一、實(shí)驗(yàn)?zāi)康?/p>

      (1)使用Java編寫(xiě)五子棋程序

      (2)掌握編寫(xiě)過(guò)程的一些類(lèi)和類(lèi)成員的使用,并且了解五子棋制作過(guò)程的一些步驟和了解一些算法。

      二、實(shí)驗(yàn)環(huán)境

      在電子樓2樓,裝有My Eclipse 的計(jì)算機(jī)上進(jìn)行

      三、實(shí)驗(yàn)內(nèi)容

      編寫(xiě)一個(gè)五子棋程序。程序主要實(shí)現(xiàn)以下功能:

      1.實(shí)現(xiàn)五子棋界面,要求人性化界面簡(jiǎn)潔美觀; 2.實(shí)現(xiàn)黑白色輪流下棋功能,能提示下棋方; 3.實(shí)現(xiàn)連成五子自動(dòng)判斷功能; 4.實(shí)現(xiàn)時(shí)間設(shè)置功能,認(rèn)輸功能;

      核心代碼如下:

      1.我的第一步是設(shè)計(jì)界面。在這個(gè)過(guò)程的要使用到以下的步驟:

      1.使用MyEclipse 創(chuàng)建一個(gè)Project關(guān)于這個(gè)工程,加入兩個(gè)類(lèi),分別是ChessFrame和Chess,而ChessFrame是這個(gè)工程中最重要的一個(gè)部分。創(chuàng)建過(guò)程中要繼承JFrame類(lèi),并且要繼承Runnable 和 MouseListener 這兩個(gè)接口,分別是用來(lái)監(jiān)聽(tīng)鼠標(biāo)的移動(dòng)和時(shí)間的變化。2.在給這個(gè)JFrame設(shè)置大小和顏色等一些東西。這里最主要的是使用了兩個(gè)函數(shù),是以前沒(méi)見(jiàn)過(guò)的:

      1.這個(gè)是用來(lái)設(shè)置默認(rèn)的窗口關(guān)閉事件的

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2.這兩個(gè)是用來(lái)獲得屏幕的大小的

      Toolkit.getDefaultToolkit().getScreenSize().height;Toolkit.getDefaultToolkit().getScreenSize().width;

      3.把本地的背景圖片加到這個(gè)窗口中,作為這個(gè)窗口的背景圖:

      使用的到的類(lèi)有BufferedImage和 ImageIO這兩個(gè)類(lèi),這兩個(gè)類(lèi)是專(zhuān)門(mén)用來(lái)處理這種功能的。主要的代碼如下:

      BufferedImage bg = null;bg = ImageIO.read(new File(“e:/background.jpg”));g.drawImage(bg,0,0,this);這樣這個(gè)圖片就加到了這個(gè)窗口的背景去了。

      這里有一個(gè)改進(jìn)就是雙緩沖技術(shù),可以防止閃屏。這個(gè)技術(shù)就是在界面和內(nèi)存都有一幅圖,我們的改動(dòng)不是直接畫(huà)界面,而是內(nèi)存中先畫(huà)好然后把內(nèi)存中直接顯示出來(lái),那樣就沒(méi)有了一前一后的,那就沒(méi)有了閃屏的事情發(fā)生了。

      4.就是畫(huà)棋盤(pán)和寫(xiě)一些游戲信息:

      這步比較簡(jiǎn)單,也沒(méi)什么可以說(shuō)的,用到的一些畫(huà)線(xiàn)的函數(shù),和寫(xiě)String的一些函數(shù)。

      以上做完以后就可以出現(xiàn)以下的界面:

      1.我的第二步就是增加對(duì)mouse的點(diǎn)擊和移動(dòng)的處理,這樣以后就可以用來(lái)下棋。在這個(gè)過(guò)程的要使用到以下的步驟: 1.增加對(duì)mouse的監(jiān)視,然后重寫(xiě)它的一些函數(shù):

      1.我們?cè)贑hessFrame的構(gòu)造函數(shù)中加入了addMouseListener()函數(shù),然后重寫(xiě)關(guān)于這個(gè)的四個(gè)函數(shù),我們這這里不重寫(xiě)所有的函數(shù),就改寫(xiě)一個(gè)MousePress函數(shù)就可以了。改寫(xiě)的代碼如下:

      public void mousePress(MouseEvent arg0){

      this.x = arg0.getX();this.y = arg0.getY();if(this.canplay)

      } this.repaint();現(xiàn)在要處理的就是加上棋子了,我在這個(gè)做了一下小改動(dòng)可以更加準(zhǔ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++;就是這個(gè),我們通過(guò)監(jiān)控鼠標(biāo)的就可以得到點(diǎn)擊的X,Y坐標(biāo),我在這里通過(guò)對(duì)它求余,假如余數(shù)大于10(就是一個(gè)格子的一半)那就給+1,不然不變。后面的畫(huà)棋子是很簡(jiǎn)單的一個(gè)過(guò)程,使用的是現(xiàn)成的函數(shù)(drawoval)

      2.這部要做的就是記錄棋子和五子連的判斷:

      1.我們通過(guò)一個(gè)數(shù)組int給保存棋子,如果是0就是沒(méi)子,1表示是黑子,2表示白子。在每次重繪的時(shí)候遍歷這個(gè)數(shù)組顯示,這樣就可以保存棋子了。2.判斷五子連起來(lái)然后獲勝的算法: 這個(gè)算法是鑒戒例子上的:

      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個(gè)方向,其中有的只是相反的方向,我們使用關(guān)于X,Y的相對(duì)的變化來(lái)判斷,并且使用count來(lái)計(jì)數(shù),如果到了5個(gè)就可以判斷勝利啦。

      1.我的第三步就是時(shí)間的變化和一些鍵的設(shè)置

      1.關(guān)于時(shí)間的變化主要是在于線(xiàn)程的使用,這里我們這個(gè)JFrame它繼承了Runnable 這個(gè)接口,不過(guò)我們要重寫(xiě)Run函數(shù),這個(gè)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, “黑方超時(shí)~~~~?¤游戲結(jié)束”);

      this.message1=“0:0:0”;

      {

      “白方超時(shí)~~~~?¤?¤游戲結(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){ 這個(gè)函數(shù)是用來(lái)事時(shí)間的變化,所以每操作以后就讓線(xiàn)程sleep(1000)就可以了,那樣就是一秒鐘。這樣就可以倒計(jì)時(shí)了。2.現(xiàn)在我們要點(diǎn)擊一個(gè)按鈕要它有響應(yīng)。

      這里我們其實(shí)就沒(méi)用到什么button,那為什么會(huì)有反應(yīng)呢,因?yàn)槲覀兺ㄟ^(guò)鼠標(biāo)的點(diǎn)擊范圍來(lái)確定要響應(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)這就是為了確定鼠標(biāo)的范圍,然后相對(duì)調(diào)用函數(shù)。

      其他還有就是一些Debug處理,在程序已經(jīng)處理了,結(jié)果的還是蠻可以處理的,不過(guò)只能是人人對(duì)戰(zhàn)。

      四、實(shí)驗(yàn)心得與小結(jié)

      這次試驗(yàn)總的來(lái)說(shuō)沒(méi)有想像中那么難,還有視屏的幫助,感覺(jué)起還是很容易動(dòng)手的,不過(guò)由于自己沒(méi)上心,沒(méi)有做比較大的改動(dòng),最主要的人機(jī)的對(duì)戰(zhàn)沒(méi)做出來(lái)是滿(mǎn)遺憾的,不過(guò)通過(guò)這個(gè)試驗(yàn),讓我學(xué)習(xí)了不少的知識(shí),比如雙緩沖,mouselistener 等許多許多的知識(shí),還有關(guān)于五子棋算法的設(shè)計(jì)也是一部分。不管怎么說(shuō)還是有學(xué)到知識(shí)的,沒(méi)什么改動(dòng),但對(duì)現(xiàn)有的知識(shí)的掌握還是很可以的。

      五、指導(dǎo)教師評(píng)議

      成績(jī)?cè)u(píng)定:

      指導(dǎo)教師簽名:

      第三篇:區(qū)域游戲五子棋

      10:10-10:40 區(qū)域游戲

      一、活動(dòng)目標(biāo):

      1、新增區(qū)域中幼兒能迅速接受理解新游戲。

      2、大膽選擇自己喜歡的游戲材料和游戲內(nèi)容,自主愉快地游戲。

      3、能與同伴合作游戲,積極交流自己的想法。

      二、活動(dòng)準(zhǔn)備:

      1、經(jīng)驗(yàn)準(zhǔn)備:知道各區(qū)域的游戲玩法。

      2、物質(zhì)準(zhǔn)備:(1)各區(qū)游戲材料如:穿編游戲、飛行棋、小畫(huà)板等。

      (2)新增游戲區(qū)域材料如:五子棋

      3、區(qū)域內(nèi)容:

      (1)公共區(qū)域:大舞臺(tái)、美發(fā)屋等。(2)班級(jí)區(qū)域:

      (3)美食區(qū)(關(guān)東煮):肉串、涮爐等。

      美食區(qū)(面包店):面包、披薩等。

      美食區(qū)(咖啡店):咖啡機(jī)、桌椅等。

      動(dòng)手區(qū)(制作區(qū)):剪刀、雙面膠等。

      動(dòng)手區(qū)(編織區(qū)):編制籃等。

      益智區(qū)(好玩的磁鐵):磁鐵、迷宮板等。

      益智區(qū)(解鎖):鎖、鑰匙等。

      閱讀區(qū):書(shū)籍,桌椅等。

      三、活動(dòng)過(guò)程:

      (一)介紹玩法,激發(fā)興趣。

      教師:今天我們的益智區(qū)有了新的棋類(lèi)游戲——五子 棋。

      五子棋是中國(guó)民間的一種棋類(lèi)小游戲,十分地簡(jiǎn)單,誰(shuí)先橫排、豎排、斜排列出5個(gè)棋子就算獲勝。

      (在電腦上下載五子棋的小游戲進(jìn)行演示,并講解。)

      (二)提出要求,注意安全。

      師:

      游戲前老師有幾點(diǎn)要求提醒大家。

      1、動(dòng)手區(qū)里做粘貼畫(huà)時(shí)要注意不要把豆子撒在地上,更不能放進(jìn)鼻子耳朵里。

      2、建構(gòu)區(qū)的小朋友在堆擺易拉罐的時(shí)候請(qǐng)輕拿輕放。

      3、益智區(qū)里初學(xué)五子棋的小朋友遇到問(wèn)題主動(dòng)找老師。

      4、要和其他小朋友文明交往、合作,學(xué)會(huì)謙讓。

      5、垃圾放在垃圾桶,不可以隨地亂丟。

      小朋友們坐坐好,坐的好的小朋友先插卡進(jìn)區(qū)。

      (三)自主進(jìn)區(qū),觀察記錄

      1、了解幼兒入?yún)^(qū)的情況,是否全部入?yún)^(qū),情緒如何。

      2、關(guān)注各區(qū)域活動(dòng)情況,教師適當(dāng)加入。

      3、仔細(xì)觀察并記錄,給予有困難的幼兒幫助。

      4、提醒幼兒遵守游戲規(guī)則,學(xué)會(huì)謙讓合作。

      (四)重點(diǎn)指導(dǎo)手工區(qū)——五子棋

      (五)結(jié)束活動(dòng),觀察記錄。整理和收拾

      督促幼兒收拾整理,做到輕、快、齊,教師協(xié)助收拾整理。

      (六)游戲評(píng)價(jià)

      (1)講解與展示

      幼兒自己介紹自己的作品,感受成功后的快樂(lè)。

      (2)交流與發(fā)現(xiàn)

      讓幼兒交流今天的活動(dòng),活動(dòng)中開(kāi)心的事情和遇到的問(wèn)題。

      (3)小結(jié)

      表?yè)P(yáng)與批評(píng),出示活動(dòng)中拍攝的照片進(jìn)行點(diǎn)評(píng),提出新要求。

      第四篇:五子棋JAVA語(yǔ)言課程設(shè)計(jì)報(bào)告

      《Java語(yǔ)言程序設(shè)計(jì)》

      課程設(shè)計(jì)報(bào)告

      學(xué) 院: 信息科學(xué)技術(shù)學(xué)院 班 級(jí): 軟件技術(shù)2班 姓 名: 王更新 學(xué) 號(hào): 1108900505 指導(dǎo)教師: 郭韶升 課設(shè)時(shí)間: 2014-03-17 至2014-03-26

      二O一四 年 三月 二十六 日

      目 錄

      一、設(shè)計(jì)要求…………………………………………....2

      二、設(shè)計(jì)步驟…………………………………………....2 2.1程序流程圖………………………….…………...2 2.2程序的功能分配……………………….………...3

      三、設(shè)計(jì)正文…………………………………………....6 3.1創(chuàng)建棋盤(pán)類(lèi)……………………………………….6 3.2判斷輸贏功能實(shí)現(xiàn)……………………………….9 3.3測(cè)試結(jié)果……………………………………….....9

      四、心得體會(huì)…………………………………………...12

      五、參考文獻(xiàn)…………………………………………...12 附錄(源代碼)……………………………………….13

      一、課程設(shè)計(jì)要求

      設(shè)計(jì)一個(gè)15╳15圍棋棋盤(pán),由兩玩家交替進(jìn)行對(duì)戰(zhàn),并可以實(shí)現(xiàn)以下功能: 1.選擇落子的先后順序 2.重置棋盤(pán) 3.刷新重新開(kāi)始 4.退出提示

      并且規(guī)定退出者判為負(fù),但退出過(guò)程中要有提示。以防不小心點(diǎn)錯(cuò)了。最后判斷某一方是否為五子連珠。

      實(shí)現(xiàn)一個(gè)簡(jiǎn)單的多用戶(hù)五子棋的游戲程序,包括如下兩個(gè)界面(1)選擇對(duì)弈桌(執(zhí)黑、執(zhí)白)。

      (2)在游戲界面,有開(kāi)始,退出(游戲未結(jié)束、點(diǎn)退出自動(dòng)判負(fù));

      二、設(shè)計(jì)步驟

      2.1程序流程圖

      2.2 程序的功能分配

      a.棋盤(pán)的繪制

      public void draw_qipan(Graphics G)//畫(huà)棋盤(pán) 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(“開(kāi)始”);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.鼠標(biāo)棋子的觸發(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.判斷落子的位置及畫(huà)出相應(yīng)的黑白棋子 public void set_Qizi(int x,int y)//落子{

      if(intGame_Start==0)//判斷游戲未開(kāi)始{

      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.判斷勝負(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è)計(jì)正文

      3.1創(chuàng)建棋盤(pán)類(lèi)

      Public class WcyChess extends Applet ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的顏色標(biāo)識(shí) 0:白子 1:黑子

      int intGame_Start=0;//游戲開(kāi)始標(biāo)志 0未開(kāi)始 1游戲中

      int intGame_Body[][]=new int[16][16];//設(shè)置棋盤(pán)棋子狀態(tài)

      int m=-1;Button b1=new Button(“開(kāi)始”);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(“勝利者!”);//沒(méi)有顯示?

      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判斷輸贏功能實(shí)現(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 測(cè)試結(jié)果

      a.進(jìn)入游戲界面

      游戲開(kāi)始的界面有三個(gè)選擇項(xiàng),用戶(hù)可以選擇相應(yīng)的角色,選擇 完畢后點(diǎn)擊開(kāi)始進(jìn)入游戲。

      b.選擇角色,開(kāi)始下棋

      首先達(dá)到五個(gè)棋子連在一塊的贏了,并在紅色區(qū)域顯示誰(shuí)贏了!c.下完后,重新開(kāi)始

      下完一盤(pán)后游戲停止,點(diǎn)擊重新開(kāi)始,界面回到初始界面,選擇角色繼續(xù)游戲.d.游戲中點(diǎn)退出,自動(dòng)判輸

      在下棋的過(guò)程當(dāng)中誰(shuí)中途退出,即點(diǎn)擊退出,系統(tǒng)自動(dòng)判斷誰(shuí)輸

      四、課程設(shè)計(jì)心得體會(huì)

      通過(guò)此次課程設(shè)計(jì),將我本學(xué)期所學(xué)的JAVA知識(shí)得到鞏固和應(yīng)用,在設(shè)計(jì)的過(guò)程中我遇到了很到問(wèn)題,不過(guò)在老師和同學(xué)們的幫助和自己的思考下還是很好的完成了。這此課程設(shè)計(jì)還讓我懂得了寫(xiě)程序不能閉門(mén)造車(chē),要努力拓寬知識(shí)面,開(kāi)闊視野,拓展思維。它還讓我學(xué)會(huì)了在網(wǎng)上查閱那些無(wú)限的資料。由于自己的分析設(shè)計(jì)和程序經(jīng)驗(yàn)不足,該系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中,還有許多沒(méi)有完善的地方,比如用戶(hù)界面設(shè)計(jì)不夠美觀,異常出錯(cuò)處理比較差等多方面問(wèn)題,這些都有待進(jìn)一步完善和提高。對(duì)于文中出現(xiàn)的不足和系統(tǒng)中出現(xiàn)的問(wèn)題敬請(qǐng)老師指導(dǎo)。

      五、參考文獻(xiàn)

      1.吳其慶編著.Java程序設(shè)計(jì)實(shí)例教程.北京:冶金工業(yè)出版社 2.柳西玲.許斌編著.Java語(yǔ)言應(yīng)用開(kāi)發(fā)基礎(chǔ).北京:清華大學(xué)出版社 3.丁振凡 Java 語(yǔ)言實(shí)用教程 :北京郵電大學(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;//旗子的顏色標(biāo)識(shí) 0:白子 1:黑子 int intGame_Start=0;//游戲開(kāi)始標(biāo)志 0未開(kāi)始 1游戲中

      int intGame_Body[][]=new int[16][16];//設(shè)置棋盤(pán)棋子狀態(tài)

      int m=-1;Button b1=new Button(“開(kāi)始”);Button b2=new Button(“重新開(kāi)始”);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(“勝利者!”);//沒(méi)有顯示?

      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){//判斷游戲未開(kāi)始

      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){ //畫(huà)棋盤(pán) 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(){ //游戲開(kāi)始

      intGame_Start=1;

      Game_btn_enable(false);

      b2.setEnabled(true);} public void Game_start_csh(){//游戲開(kāi)始初始化

      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(){ //重新開(kāi)始游戲

      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;

      } } }

      第五篇:五子棋游戲軟件工程課程設(shè)計(jì)

      軟件工程設(shè)計(jì)

      專(zhuān) 業(yè):班 級(jí):姓 名:學(xué) 號(hào):指導(dǎo)老師:

      I

      目錄

      第一章 需求分析.......................................................1 1.1 總體分析..........................................................1 1.2 初始化............................................................1 1.3 主循環(huán)控制模塊....................................................1 1.4 玩家下子..........................................................1 1.5 盤(pán)面分析填寫(xiě)棋型表................................................2 1.6 對(duì)方下子..........................................................2 1.7 勝負(fù)判斷..........................................................2 第二章 功能描述.......................................................3 2.1 功能模塊圖........................................................3 2.2 功能說(shuō)明..........................................................3 第三章 系統(tǒng)設(shè)計(jì).......................................................4 3.1 流程圖............................................................4 3.2 流程圖說(shuō)明........................................................5 第四章 運(yùn)行結(jié)果.......................................................6 第五章 總結(jié)...........................................................7 附錄一 源代碼.........................................................8

      II

      軟件工程設(shè)計(jì)

      五子棋游戲

      第一章 需求分析

      1.1 總體分析

      軟件需求分析是軟件開(kāi)發(fā)周期的第一個(gè)階段,也是關(guān)系到軟件開(kāi)發(fā)成敗的關(guān)鍵一步。對(duì)于任何一個(gè)軟件而言,需求分析工作都是至關(guān)重要的一步。只有通過(guò)軟件需求分析,才能把軟件的功能和性能由總體的概念性描述轉(zhuǎn)化為具體的規(guī)格說(shuō)明,進(jìn)而建立軟件開(kāi)發(fā)的基礎(chǔ)。實(shí)踐表明,需求分析工作進(jìn)行得好壞,在很大程度上決定了軟件開(kāi)發(fā)的成敗。

      軟件需求分析的任務(wù)是:讓用戶(hù)和開(kāi)發(fā)者共同明確將要開(kāi)發(fā)的是一個(gè)什么樣的軟件。具體而言,就是通過(guò)對(duì)問(wèn)題及其環(huán)境的理解、分析和綜合,建立邏輯模型,完成新軟件的邏輯方案設(shè)計(jì)。

      基于本游戲,首先得為整個(gè)棋盤(pán)建立一張表格用以記錄棋子信息,我們使用一個(gè)15*15的二維數(shù)組Table[15][15](15*15是五子棋棋盤(pán)的大小),數(shù)組的每一個(gè)元素對(duì)應(yīng)棋盤(pán)上的一個(gè)交叉點(diǎn),用‘0’表示空位、‘1’代表己方的子、‘2’代表對(duì)方的子;這張表也是今后分析的基礎(chǔ)。在此之后還要為兩個(gè)玩家雙方各建立一張棋型表Computer[15][15][4]和Player[15][15][4],用來(lái)存放棋型數(shù)據(jù)。

      1.2 初始化

      首先,建立盤(pán)面數(shù)組Table[15][15]、對(duì)戰(zhàn)雙方的棋型表Computer[15][15][4]和Player[15][15][4]并將它們清零以備使用;然后初始化顯示器、鍵盤(pán)、鼠等輸入輸出設(shè)備并在屏幕上畫(huà)出棋盤(pán)(棋盤(pán)可以不顯示)。

      1.3 主循環(huán)控制模塊

      控制下棋順序,當(dāng)輪到某方下子時(shí),負(fù)責(zé)將程序轉(zhuǎn)到相應(yīng)的模塊中去,主要擔(dān)當(dāng)一個(gè)調(diào)度者的角色。

      1.4 玩家下子

      當(dāng)輪到玩家下時(shí),您通過(guò)鍵盤(pán)或鼠標(biāo)在棋盤(pán)上落子,程序會(huì)根據(jù)該點(diǎn)的位置,在Table[15][15]數(shù)組的相應(yīng)地方記錄‘2’,以表明該子是玩家下的。

      軟件工程設(shè)計(jì)

      1.5 盤(pán)面分析填寫(xiě)棋型表

      您在下五子棋時(shí),一定會(huì)先根據(jù)棋盤(pán)上的情況,找出當(dāng)前最重要的一些點(diǎn)位,如“活三”、“沖四”等;然后再在其中選擇落子點(diǎn)。先來(lái)分析己方的棋型,我們從棋盤(pán)左上角出發(fā),向右逐行搜索,當(dāng)遇到一個(gè)空白點(diǎn)時(shí),以它為中心向左挨個(gè)查找,如果遇到己方的子則記錄然后繼續(xù),如果遇到對(duì)方的子、空白點(diǎn)或邊界就停止查找。左邊完成后再向右進(jìn)行同樣的操作;最后把左右兩邊的記錄合并起來(lái),得到的數(shù)據(jù)就是該點(diǎn)橫向上的棋型,然后把棋型的編號(hào)填入到Computer[x][y][n]中就行了(x、y代表坐標(biāo),n=0、1、2、3分別代表橫、豎、左斜、右斜四個(gè)方向)。而其他三個(gè)方向的棋型也可用同樣的方法得到,當(dāng)搜索完整張棋盤(pán)后,己方棋型表也就填寫(xiě)完畢了。然后再用同樣的方法填寫(xiě)對(duì)方棋型表。

      注意:所有棋型的編號(hào)都要事先 定義好,越重要的號(hào)數(shù)越大!

      1.6 對(duì)方下子

      有了上面填寫(xiě)的兩張棋型表,就是遍歷棋型表Computer[15][15][4]和Player[15][15][4]找出其中數(shù)值最大的一點(diǎn),在該點(diǎn)下子即可。但這種算法的弱點(diǎn)非常明顯,只顧眼前利益,不能顧全大局,這就和許多五子棋初學(xué)者一樣犯了“目光短淺”的毛病。如果在這兒下子將會(huì)形成對(duì)手不得不防守的棋型(例如:‘沖四’、‘活三’);那么下一步對(duì)手就會(huì)照您的思路下子來(lái)防守您,如此一來(lái)便完成了第一步的預(yù)測(cè)。這時(shí)再調(diào)用模塊4對(duì)預(yù)測(cè)后的棋進(jìn)行盤(pán)面分析,如果出現(xiàn)了‘四三’、‘雙三’或‘雙四’等制勝點(diǎn),那么己方就可以獲勝了(當(dāng)然對(duì)黑棋而言‘雙三’、‘雙四’是禁手,另當(dāng)別論);否則照同樣的方法向下分析,就可預(yù)測(cè)出第二步、第三步??

      等一等,要是盤(pán)面上沒(méi)有對(duì)手必須防的棋型,哪該怎么辦呢?進(jìn)攻不成的話(huà)就得考慮防守了,將自己和對(duì)手調(diào)換一下位置,然后用上面的方法來(lái)預(yù)測(cè)對(duì)手的棋,這樣既可以防住對(duì)手巧妙的攻擊,又能待機(jī)發(fā)動(dòng)反擊,何樂(lè)而不為呢!

      1.7 勝負(fù)判斷

      務(wù)須多言,某方形成五子連即獲勝;若黑棋走出‘雙三’、‘雙四’或長(zhǎng)連即以禁手判負(fù)。

      軟件工程設(shè)計(jì)

      第二章 功能描述

      2.1 功能模塊圖

      五子棋游戲判斷棋盤(pán)是否已滿(mǎn)判斷是否出錯(cuò)并提示判斷那方獲勝交替循環(huán)雙方下棋 圖2.1 功能模塊圖

      2.2 功能說(shuō)明

      該五子棋程序基本上實(shí)現(xiàn)了五子棋的游戲功能,有雙方下棋的界面及最終判定結(jié)果的界面。同時(shí)該游戲采用二維坐標(biāo)實(shí)現(xiàn),明了易懂,方便玩家在游戲過(guò)程中的基本操作,使游戲更加簡(jiǎn)便。在細(xì)節(jié)方面,該系統(tǒng)提供實(shí)時(shí)存儲(chǔ)功能,隨時(shí)記錄為完成的游戲,使用戶(hù)可以很好的處理意外中斷的情況。該游戲基本實(shí)現(xiàn)了游戲的一些要求和特征。在游戲的源程序及文檔方面,我們也嚴(yán)格遵守軟件工程思想,立足實(shí)驗(yàn)要求,確定任務(wù),需求分析,設(shè)計(jì)和編碼,每個(gè)步驟力求清晰易懂。原代碼注釋詳盡,各功能模塊功能分明,可移植性強(qiáng)。當(dāng)然該系統(tǒng)也有很多不足的地方,第一次進(jìn)行獨(dú)立的課程設(shè)計(jì),也有很多細(xì)節(jié)方面是考慮到的,這款游戲也是在不斷的調(diào)試和修改中產(chǎn)生和完善的。希望老師能夠指出不足,幫助我不斷提高。

      軟件工程設(shè)計(jì)

      第三章 系統(tǒng)設(shè)計(jì)

      3.1 流程圖

      開(kāi)始棋盤(pán)已滿(mǎn)是輸出平局否“0”方選位置判斷該位置是否有棋有另找位置無(wú)“0”方落子否判斷“0”方是否獲勝是輸出“0”方獲勝否棋盤(pán)已滿(mǎn)是輸出平局結(jié)束否“x”方選位置判斷該位置是否有棋有另找位置無(wú)“x”方落子判斷“x”方是否獲勝是輸出“x”方獲勝 圖3.1 流程圖

      軟件工程設(shè)計(jì)

      3.2 流程圖說(shuō)明

      本程序定義了各種操作函數(shù)、各種狀態(tài)判定宏,思想明確,思路清晰。各個(gè)判斷選擇了不同路徑,因此繼續(xù)進(jìn)行或輸出結(jié)果。程序中,“循環(huán)”的利用非常直接和清晰,雙方交替下棋,因此循環(huán)往復(fù)。最終決出勝負(fù)或最終平局。分析時(shí),也考慮了許多種情況,針對(duì)各個(gè)情況均作出了相對(duì)措施和解決方案。

      程序采用循環(huán)進(jìn)行雙方交替下棋,并進(jìn)行了很多判斷。首先判斷棋盤(pán)是否已滿(mǎn),若棋盤(pán)已滿(mǎn),則輸出平局,結(jié)束游戲;若棋盤(pán)未滿(mǎn),則繼續(xù)進(jìn)行。然后判斷“0”方是否勝出,若“0”方獲勝,則輸出“0”方獲勝,結(jié)束游戲;若“0”方?jīng)]有獲勝,則繼續(xù)進(jìn)行。再判斷“x”方是否獲勝,若“x”方獲勝,則輸出“x”方獲勝,結(jié)束游戲;若“x”方?jīng)]有獲勝,則繼續(xù)進(jìn)行。回到“首先”的判斷。如此循環(huán)??

      軟件工程設(shè)計(jì)

      第四章 運(yùn)行結(jié)果

      圖4.1 運(yùn)行結(jié)果初始圖

      圖4.2 游戲過(guò)程圖

      圖4.3

      軟件工程設(shè)計(jì)

      圖4.4

      圖4.5

      軟件工程設(shè)計(jì)

      圖4.6

      圖4.7

      軟件工程設(shè)計(jì)

      圖4.8 游戲進(jìn)行圖

      圖4.9 “0”方獲勝圖

      軟件工程設(shè)計(jì)

      附錄一 源代碼

      #include

      using namespace std;

      int Hsheng(char a[][15]);

      //判斷o子是否獲勝的函數(shù)

      int Bsheng(char a[][15]);

      //判斷x子是否獲勝的函數(shù)

      int he(char a[][15]);

      //判斷是否平局(也就是棋盤(pán)下滿(mǎn)了)的函數(shù)

      void qipan(char a[15][15])

      //執(zhí)行輸出棋盤(pán)命令 {

      cout<<“本游戲采用二維數(shù)組實(shí)現(xiàn),棋盤(pán)為15X15的二維直角坐標(biāo)系,均從1到15,祝二位游戲愉快.”;for(int i=0;i<15;i++)

      //打印棋盤(pán)

      {

      for(int j=0;j<15;j++)cout<

      }

      }

      int main(){

      char a[15][15];

      int x,y;

      for(int i=0;i<15;i++)

      for(int j=0;j<15;j++)

      a[i][j]=' ';qipan(a);

      while(1)//用循環(huán)語(yǔ)句執(zhí)行o,x交替下子,這些while語(yǔ)句看起來(lái)似乎是個(gè)死循環(huán)~實(shí)際上都會(huì)經(jīng)過(guò)break結(jié)束

      {

      int a1=1;

      while(1)

      { for(;a1;)

      {

      cout<<“請(qǐng)輸入o子下的位置:”;

      //輸入o子的位置

      cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')

      //判斷是否已有子

      {cout<<“已有子請(qǐng)重下”<<“,”;continue;}

      else if(x>=15||y>=15){cout<<“輸入錯(cuò)誤請(qǐng)重輸”<<“,”;continue;}

      else { a[x][y]='o';a1=0;}

      }

      break;}

      軟件工程設(shè)計(jì)

      qipan(a);

      //下好o子后將棋盤(pán)顯示

      if(Hsheng(a))

      //判斷o子是否已經(jīng)獲勝

      {cout<<“o子獲勝”<

      while(1)

      //下x子

      { cout<<“請(qǐng)輸入x子下的位置:”;

      cin>>x>>y;

      if(a[x][y]=='o'||a[x][y]=='x'||x>=15||y>=15)

      {

      for(;a[x][y]=='o'||a[x][y]=='x';)

      {

      cout<<“已有子請(qǐng)重下”;

      cout<<“請(qǐng)輸入x子下的位置:”;

      cin>>x>>y;continue;}

      for(;x>=15||y>=15||x;)

      { cout<<“輸入錯(cuò)誤請(qǐng)重輸”<<“,”;

      //判斷輸入棋子位置是否正確

      cout<<“請(qǐng)輸入x子下的位置:”;

      cin>>x>>y;continue;}

      a[x][y]='x';break;

      }

      else

      {a[x][y]='x';break;}

      }

      qipan(a);

      //再一次輸出棋盤(pán)

      if(Bsheng(a))

      //判斷x子是否已經(jīng)獲勝

      {cout<<“x子獲勝”<

      if(he(a))

      //判斷是否平局

      {cout<<“平局”<

      }

      return 0;

      }

      int Hsheng(char a[][15]){

      int i,j;

      //判斷橫著的5個(gè)是否都相等

      for(i=0;i<15;i++)

      for(j=0;j<15;j++)

      if(a[i][j]=='o'&&a[i][j+1]=='o'&&a[i][j+2]=='o'&&a[i][j+3]=='o'&&a[i][j+4]=='o')

      return 1;

      for(j=0;j<15;j++)

      //判斷豎著的5個(gè)是否都相等

      for(i=0;i<15;i++)

      if(a[i][j]=='o'&&a[i+1][j]=='o'&&a[i+2][j]=='o'&&a[i+3][j]=='o'&&a[i+4][j]=='o')

      軟件工程設(shè)計(jì)

      return 1;

      for(i=0;i<15;i++)

      //判斷左斜5個(gè)

      for(j=0;j<15;j++)

      if(a[i][j]=='o'&&a[i+1][j+1]=='o'&&a[i+2][j+2]=='o'&&a[i+3][j+3]=='o'&&a[i+4][j+4]=='o')

      return 1;

      for(i=0;i<15;i++)

      //右斜5個(gè)

      for(j=14;j>3;j--)

      if(a[i][j]=='H'&&a[i+1][j-1]=='o'&&a[i+2][j-2]=='o'&&a[i+3][j-3]=='o'&&a[i+4][j-4]=='o')

      return 1;

      return 0;

      }

      int Bsheng(char a[][15])

      //同o,只是改字符

      {

      int i,j;

      for(i=0;i<15;i++)

      for(j=0;j<15;j++)

      if(a[i][j]=='x'&&a[i][j+1]=='x'&&a[i][j+2]=='x'&&a[i][j+3]=='x'&&a[i][j+4]=='x')

      return 1;

      for(j=0;j<15;j++)

      for(i=0;i<15;i++)

      if(a[i][j]=='x'&&a[i+1][j]=='x'&&a[i+2][j]=='x'&&a[i+3][j]=='x'&&a[i+4][j]=='x')

      return 1;

      for(i=0;i<15;i++)

      for(j=0;j<15;j++)

      if(a[i][j]=='x'&&a[i+1][j+1]=='x'&&a[i+2][j+2]=='x'&&a[i+3][j+3]=='x'&&a[i+4][j+4]=='x')

      return 1;

      for(i=0;i<15;i++)

      for(j=14;j>3;j--)

      if(a[i][j]=='x'&&a[i+1][j-1]=='x'&&a[i+2][j-2]=='x'&&a[i+3][j-3]=='x'&&a[i+4][j-4]=='x')

      return 1;

      return 0;

      }

      int he(char a[][15])

      {

      for(int i=0;i<15;i++)

      for(int j=0;j<15;j++)

      {

      if(a[i][j]==' ')

      //當(dāng)棋盤(pán)全部子都不是' '時(shí)才能return 1,即棋盤(pán)已下滿(mǎn)

      return 0;

      }

      return 1;

      }

      下載java五子棋游戲_控制臺(tái)_總結(jié)報(bào)告(推薦五篇)word格式文檔
      下載java五子棋游戲_控制臺(tái)_總結(jié)報(bào)告(推薦五篇).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        五子棋游戲項(xiàng)目報(bào)告

        - 1 -《軟件技術(shù)基礎(chǔ)》項(xiàng)目報(bào)告《軟件技術(shù)基礎(chǔ)》課程項(xiàng)目報(bào)告 項(xiàng)目名稱(chēng):用VC++實(shí)現(xiàn)的五子棋游戲 專(zhuān)業(yè)班級(jí): G11009 項(xiàng)目成員:崔光浩 程德武 付強(qiáng) 付鈺 李洪潤(rùn) 尚振興 沈婷玉 佟......

        射擊游戲 Java

        游戲資源是從cping1982的博客里下載的(http://blog.csdn.net/cping1982/article/details/6725015)。 下載下來(lái)的源碼是反編譯的,我按照自己的思路,盡量模擬跟它一樣的功能效果,......

        五子棋游戲總體設(shè)計(jì)與實(shí)現(xiàn)

        4.系統(tǒng)總體設(shè)計(jì)與實(shí)現(xiàn) 4.1 總體設(shè)計(jì)分析 總體設(shè)計(jì)是軟件開(kāi)發(fā)過(guò)程中的另一個(gè)重要階段,在這一階段中將根據(jù)需求分析中提出的邏輯模型,科學(xué)合理地進(jìn)行物理模型的設(shè)計(jì)。這個(gè)階段的......

        java社會(huì)實(shí)踐報(bào)告總結(jié)報(bào)告

        java社會(huì)實(shí)踐報(bào)告總結(jié)報(bào)告 導(dǎo)語(yǔ):Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話(huà)和互聯(lián)網(wǎng),同時(shí)擁有全......

        五子棋游戲開(kāi)發(fā)總結(jié)(C語(yǔ)言版)

        五子棋游戲開(kāi)發(fā)總結(jié) 一.五子棋游戲概述 略 二.游戲功能 對(duì)弈游戲,自動(dòng)判斷游戲勝負(fù)。 采用人機(jī)對(duì)話(huà)模式,界面設(shè)計(jì)美觀友好。 具體玩法:采用任意鍵開(kāi)始游戲,此處采用鍵盤(pán)值W、A、S......

        java游戲制作培訓(xùn)班

        java游戲制作培訓(xùn)班 隨著技術(shù)對(duì)游戲經(jīng)驗(yàn)的促進(jìn),游戲市場(chǎng)持續(xù)增長(zhǎng)。商業(yè)IT革命為我們節(jié)省了時(shí)間和金錢(qián),從而提高了我們的工作水平,我們因此會(huì)花費(fèi)更多的時(shí)間和金錢(qián)在游戲上,來(lái)改......

        啤酒游戲總結(jié)報(bào)告

        啤酒游戲總結(jié)報(bào)告 啤酒游戲,是 1960 年代,MIT 的 Sloan 管理學(xué)院所發(fā)展出來(lái)的一種類(lèi)似“大富翁”的策略游戲。念大學(xué)本科時(shí),企業(yè)管理案例研究課的老師曾經(jīng)帶領(lǐng)班上同學(xué)做過(guò)啤酒......

        啤酒游戲總結(jié)報(bào)告

        廖賢靖 20083274 2008211 啤酒游戲總結(jié)報(bào)告 啤酒游戲,是1960 年代,MIT 的 Sloan 管理學(xué)院所發(fā)展出來(lái)的一種類(lèi)似“大富翁”的策略游戲。大型作業(yè)通過(guò)這個(gè)游戲模擬了一個(gè)啤酒生......