2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  一、設(shè)計任務(wù)書</b></p><p>  (一)課程設(shè)計的目的與任務(wù) </p><p>  課程設(shè)計是課程教學(xué)中的一項重要內(nèi)容,是完成教學(xué)計劃達(dá)到教學(xué)目標(biāo)的重要環(huán)節(jié),是教學(xué)計劃中綜合性較強的實踐教學(xué)環(huán)節(jié),它對幫助學(xué)生全面牢固地掌握課堂教學(xué)內(nèi)容、培養(yǎng)學(xué)生的實踐和實際動手能力、提高學(xué)生全面素質(zhì)具有很重要的意義?!禞ava語言程序設(shè)計》是一

2、門實用性和實踐性都很強的課程,課程設(shè)計環(huán)節(jié)應(yīng)占有更加重要的地位。</p><p>  本課程設(shè)計的目的和任務(wù),是通過學(xué)生用Java語言設(shè)計一個完整的應(yīng)用程序,使學(xué)生綜合應(yīng)用所學(xué)知識完成軟件的分析、設(shè)計、調(diào)試和總結(jié),可加深和鞏固對理論教學(xué)和實驗教學(xué)內(nèi)容的掌握,使學(xué)生進(jìn)一步掌握使用面向?qū)ο蠹夹g(shù)開發(fā)完整系統(tǒng)的方法。</p><p> ?。ǘ┍菊n程設(shè)計的基本理論</p><p

3、>  本課程設(shè)計基于面向?qū)ο蟪绦蛟O(shè)計思想,從面向?qū)ο蟮木幊碳夹g(shù)入手,涉及圖形用戶界面設(shè)計、異常處理、輸入輸出等知識點,是Java語言程序設(shè)計課程的一個綜合應(yīng)用。</p><p> ?。ㄈ┱n程設(shè)計的方式與基本要求</p><p><b>  1. 課程設(shè)計方式</b></p><p>  課程設(shè)計的題目應(yīng)提前兩周布置給學(xué)生,每2-3人為1

4、組,每組可以從給定的選題表中選擇一個題目,以便學(xué)生作好充分準(zhǔn)備。1周的課程設(shè)計主要分成以下幾個階段: </p><p>  (1)系統(tǒng)分析與設(shè)計</p><p>  (2)在前期資料查閱的基礎(chǔ)上,學(xué)生對所選的課題進(jìn)行功能分析與設(shè)計,并與指導(dǎo)老師進(jìn)行充分的溝通。</p><p>  (3)程序編制與調(diào)試</p><p>  (4)學(xué)生在指導(dǎo)老師

5、的指導(dǎo)下獨立完成程序的編制與調(diào)試,指導(dǎo)老師應(yīng)實時考察學(xué)生的實際編程與調(diào)試能力。</p><p><b>  (5)總結(jié)報告</b></p><p>  (6)最終提交完整的設(shè)計文檔、源代碼和可執(zhí)行文件。學(xué)生根據(jù)規(guī)定的課程設(shè)計報告格式撰寫設(shè)計報告與總結(jié)。</p><p>  (7)答辯與考核階段</p><p>  (8)

6、指導(dǎo)教師對每位學(xué)生進(jìn)行當(dāng)面提問,學(xué)生以語言表達(dá)和實際操作的方式進(jìn)行答辯。指導(dǎo)教師將綜合每一學(xué)生1周的表現(xiàn)及能力進(jìn)行綜合評分。</p><p><b>  2.基本要求</b></p><p>  (1)設(shè)計的軟件系統(tǒng)要實現(xiàn)題目要求的功能。</p><p>  (2)整個課程設(shè)計的各個環(huán)節(jié)都要求學(xué)生自己動手。</p><p&g

7、t;  (3)要求學(xué)生熟練掌握J(rèn)ava語言設(shè)計一個完整的應(yīng)用程序的設(shè)計方法和步驟(軟件的分析、設(shè)計、調(diào)試和總結(jié))。</p><p>  (4)對課程設(shè)計進(jìn)行總結(jié),撰寫課程設(shè)計報告;</p><p><b>  二、程序功能簡介</b></p><p>  能夠顯示貪吃蛇的運動,回車、R、S是開始,空格、P是暫停。能夠通過鍵盤上的上下左右鍵,控制

8、貪吃蛇的移動方向。當(dāng)吃到食物時,蛇就自動長大一格,并且獲得一分;當(dāng)蛇撞墻或撞到自己就結(jié)束游戲。結(jié)束后能顯示獲得分?jǐn)?shù)。</p><p><b>  三、系統(tǒng)設(shè)計</b></p><p><b> ?。ㄒ唬┰O(shè)計分析</b></p><p><b>  要點分析:</b></p><p&

9、gt;  (1)數(shù)據(jù)結(jié)構(gòu):matrix[][]用來存儲地圖上面的信息,如果什么也沒有設(shè)置為false,如果有食物或蛇,設(shè)置為true;nodeArray,一個LinkedList,用來保存蛇的每一節(jié);food用來保存食物的位置;而Node類是保存每個位置的信息。</p><p><b>  (2)重要函數(shù):</b></p><p>  changeDirection(

10、int newDirection) ,用來改變蛇前進(jìn)的方向,而且只是保存頭部的前進(jìn)方向,因為其他的前進(jìn)方向已經(jīng)用位置來指明了。 其中newDirection必須和原來的direction不是相反方向,所以相反方向的值用了同樣的奇偶性。在測試的時候使用了direction%2!=newDirection%2 進(jìn)行判斷。moveOn(),用來更新蛇的位置,對于當(dāng)前方向,把頭部位置進(jìn)行相應(yīng)改變。如果越界,結(jié)束;否則,檢測是否遇到食物(加頭部)

11、或身體(結(jié)束);如果什么都沒有,加上頭部,去掉尾部。由于用了LinkedList數(shù)據(jù)結(jié)構(gòu),省去了相當(dāng)多的麻煩。</p><p><b> ?。ǘ┏绦虼a</b></p><p>  文件名:SnakeModel.java</p><p>  package sy;</p><p>  import java.awt.*

12、;</p><p>  import java.awt.event.*;</p><p>  import javax.swing.*;</p><p>  import java.util.*;</p><p>  public class GreedSnake implements KeyListener</p><p

13、><b>  {</b></p><p>  JFrame mainFrame;</p><p>  Canvas paintCanvas;</p><p>  JLabel labelScore;//計分牌</p><p>  SnakeModel snakeModel=null;// 蛇</p>

14、<p>  public static final int canvasWidth=200;</p><p>  public static final int canvasHeight=300;</p><p>  public static final int nodeWidth=10;</p><p>  public static final in

15、t nodeHeight=10;</p><p>  //GreedSnake():初始化游戲界面</p><p>  public GreedSnake()</p><p><b>  {</b></p><p><b>  //設(shè)置界面元素</b></p><p>  m

16、ainFrame=new JFrame("GreedSnake");</p><p>  Container cp=mainFrame.getContentPane();</p><p>  labelScore=new JLabel("Score:");</p><p>  cp.add(labelScore,BorderL

17、ayout.NORTH);</p><p>  paintCanvas=new Canvas();</p><p>  paintCanvas.setSize(canvasWidth+1,canvasHeight+1);</p><p>  paintCanvas.addKeyListener(this);</p><p>  cp.add(

18、paintCanvas,BorderLayout.CENTER);</p><p>  JPanel panelButtom=new JPanel();</p><p>  panelButtom.setLayout(new BorderLayout());</p><p>  JLabel labelHelp;// 幫助信息</p><p>

19、;  labelHelp=new JLabel("PageUp, PageDown for speed:",JLabel.CENTER);</p><p>  panelButtom.add(labelHelp,BorderLayout.NORTH);</p><p>  labelHelp=new JLabel("ENTER or R or S for st

20、art;",JLabel.CENTER);</p><p>  panelButtom.add(labelHelp,BorderLayout.CENTER);</p><p>  labelHelp=new JLabel("SPACE or P for pause",JLabel.CENTER);</p><p>  panelButt

21、om.add(labelHelp,BorderLayout.SOUTH);</p><p>  cp.add(panelButtom,BorderLayout.SOUTH);</p><p>  mainFrame.addKeyListener(this);</p><p>  mainFrame.pack();</p><p>  main

22、Frame.setResizable(false);</p><p>  mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  mainFrame.setVisible(true);</p><p><b>  begin();</b></p>&l

23、t;p><b>  }</b></p><p>  //keyPressed():按鍵檢測</p><p>  public void keyPressed(KeyEvent e)</p><p><b>  {</b></p><p>  int keyCode=e.getKeyCode()

24、;</p><p>  if(snakeModel.running) switch(keyCode)</p><p><b>  {</b></p><p>  case KeyEvent.VK_UP:</p><p>  snakeModel.changeDirection(SnakeModel.UP);</p&

25、gt;<p><b>  break;</b></p><p>  case KeyEvent.VK_DOWN:</p><p>  snakeModel.changeDirection(SnakeModel.DOWN);</p><p><b>  break;</b></p><p&g

26、t;  case KeyEvent.VK_LEFT:</p><p>  snakeModel.changeDirection(SnakeModel.LEFT);</p><p><b>  break;</b></p><p>  case KeyEvent.VK_RIGHT:</p><p>  snakeModel

27、.changeDirection(SnakeModel.RIGHT);</p><p><b>  break;</b></p><p>  case KeyEvent.VK_ADD:</p><p>  case KeyEvent.VK_PAGE_UP:</p><p>  snakeModel.speedUp();/

28、/ 加速</p><p><b>  break;</b></p><p>  case KeyEvent.VK_SUBTRACT:</p><p>  case KeyEvent.VK_PAGE_DOWN:</p><p>  snakeModel.speedDown();// 減速</p><p&

29、gt;<b>  break;</b></p><p>  case KeyEvent.VK_SPACE:</p><p>  case KeyEvent.VK_P:</p><p>  snakeModel.changePauseState();// 暫停或繼續(xù)</p><p><b>  break;<

30、;/b></p><p><b>  default:</b></p><p><b>  }</b></p><p><b>  //重新開始</b></p><p>  if(keyCode==KeyEvent.VK_R || keyCode==KeyEvent.VK

31、_S</p><p>  || keyCode==KeyEvent.VK_ENTER)</p><p><b>  {</b></p><p>  snakeModel.running=false;</p><p><b>  begin();</b></p><p><

32、;b>  }</b></p><p><b>  }</b></p><p>  //keyReleased():空函數(shù)</p><p>  public void keyReleased(KeyEvent e)</p><p><b>  {</b></p><

33、;p><b>  }</b></p><p>  //keyTyped():空函數(shù)</p><p>  public void keyTyped(KeyEvent e)</p><p><b>  {</b></p><p><b>  }</b></p>

34、<p>  //repaint():繪制游戲界面(包括蛇和食物)</p><p>  void repaint()</p><p><b>  {</b></p><p>  Graphics g=paintCanvas.getGraphics();</p><p>  //draw background<

35、;/p><p>  g.setColor(Color.WHITE);</p><p>  g.fillRect(0,0,canvasWidth,canvasHeight);</p><p>  //draw the snake</p><p>  g.setColor(Color.BLACK);</p><p>  Lin

36、kedList na=snakeModel.nodeArray;</p><p>  Iterator it=na.iterator();</p><p>  while(it.hasNext())</p><p><b>  {</b></p><p>  Node n=(Node)it.next();</p&g

37、t;<p>  drawNode(g,n);</p><p><b>  }</b></p><p>  // draw the food</p><p>  g.setColor(Color.RED);</p><p>  Node n=snakeModel.food;</p><p&

38、gt;  drawNode(g,n);</p><p>  updateScore();</p><p><b>  }</b></p><p>  //drawNode():繪畫某一結(jié)點(蛇身或食物)</p><p>  private void drawNode(Graphics g,Node n)</p>

39、;<p><b>  {</b></p><p>  g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);</p><p><b>  }</b></p><p>  //updateScore():改變計分牌</p>

40、<p>  public void updateScore()</p><p><b>  {</b></p><p>  String s="Score:"+snakeModel.score;</p><p>  labelScore.setText(s);</p><p><b

41、>  }</b></p><p>  //begin():游戲開始,放置貪吃蛇</p><p>  void begin()</p><p><b>  {</b></p><p>  if(snakeModel==null||!snakeModel.running)</p><p&

42、gt;<b>  {</b></p><p>  snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,</p><p>  this.canvasHeight/nodeHeight);</p><p>  (new Thread(snakeModel)).start();</p>

43、<p><b>  }</b></p><p><b>  }</b></p><p>  //main():主函數(shù)</p><p>  public static void main(String[] args)</p><p><b>  {</b></

44、p><p>  GreedSnake gs=new GreedSnake();</p><p><b>  }</b></p><p><b>  }</b></p><p>  //Node:結(jié)點類</p><p>  class Node</p><p&g

45、t;<b>  {</b></p><p><b>  int x;</b></p><p><b>  int y;</b></p><p>  Node(int x,int y)</p><p><b>  {</b></p><p

46、><b>  this.x=x;</b></p><p><b>  this.y=y;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //SnakeModel:貪吃蛇模型</p&g

47、t;<p>  class SnakeModel implements Runnable</p><p><b>  {</b></p><p>  GreedSnake gs;</p><p>  boolean[][] matrix;// 界面數(shù)據(jù)保存在數(shù)組里</p><p>  LinkedList

48、nodeArray=new LinkedList();</p><p>  Node food;</p><p>  int maxX;//最大寬度</p><p>  int maxY;//最大長度</p><p>  int direction=2;//方向</p><p>  boolean running=fa

49、lse;</p><p>  int timeInterval=200;// 間隔時間(速度)</p><p>  double speedChangeRate=0.75;// 速度改變程度</p><p>  boolean paused=false;// 游戲狀態(tài)</p><p>  int score=0;</p><

50、;p>  int countMove=0;</p><p>  // UP和DOWN是偶數(shù),RIGHT和LEFT是奇數(shù)</p><p>  public static final int UP=2;</p><p>  public static final int DOWN=4;</p><p>  public static fin

51、al int LEFT=1;</p><p>  public static final int RIGHT=3;</p><p>  //GreedModel():初始化界面</p><p>  public SnakeModel(GreedSnake gs,int maxX,int maxY)</p><p><b>  {&l

52、t;/b></p><p>  this.gs=gs;</p><p>  this.maxX=maxX;</p><p>  this.maxY=maxY;</p><p>  matrix=new boolean[maxX][];</p><p>  for(int i=0;i<maxX;++i)<

53、;/p><p><b>  {</b></p><p>  matrix[i]=new boolean[maxY];</p><p>  Arrays.fill(matrix[i],false);// 沒有蛇和食物的地區(qū)置false</p><p><b>  }</b></p><

54、p><b>  //初始化貪吃蛇</b></p><p>  int initArrayLength=maxX>20 ? 10 : maxX/2;</p><p>  for(int i=0;i<initArrayLength;++i)</p><p><b>  {</b></p><

55、;p>  int x=maxX/2+i;</p><p>  int y=maxY/2;</p><p>  nodeArray.addLast(new Node(x,y));</p><p>  matrix[x][y]=true;// 蛇身處置true</p><p><b>  }</b></p>

56、<p>  food=createFood();</p><p>  matrix[food.x][food.y]=true;// 食物處置true</p><p><b>  }</b></p><p>  //changeDirection():改變運動方向</p><p>  public void

57、changeDirection(int newDirection)</p><p><b>  {</b></p><p>  if(direction%2!=newDirection%2)// 避免沖突</p><p><b>  {</b></p><p>  direction=newDire

58、ction;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //moveOn():貪吃蛇運動函數(shù)</p><p>  public boolean moveOn()</p><p><b>  {</b&g

59、t;</p><p>  Node n=(Node)nodeArray.getFirst();</p><p>  int x=n.x;</p><p>  int y=n.y;</p><p>  switch(direction)</p><p><b>  {</b></p>

60、<p><b>  case UP:</b></p><p><b>  y--;</b></p><p><b>  break;</b></p><p>  case DOWN:</p><p><b>  y++;</b></p>

61、;<p><b>  break;</b></p><p>  case LEFT:</p><p><b>  x--;</b></p><p><b>  break;</b></p><p>  case RIGHT:</p><p>

62、;<b>  x++;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  if((0<=x&&x<maxX)&&(0<=y&&y<maxY))</p>

63、<p><b>  {</b></p><p>  if(matrix[x][y])// 吃到食物或者撞到身體</p><p><b>  {</b></p><p>  if(x==food.x&&y==food.y)// 吃到食物</p><p><b>

64、  {</b></p><p>  nodeArray.addFirst(food);// 在頭部加上一結(jié)點</p><p>  //計分規(guī)則與移動長度和速度有關(guān)</p><p>  int scoreGet=(10000-200*countMove)/timeInterval;</p><p>  score+=scoreGet

65、>0 ? scoreGet : 10;</p><p>  countMove=0;</p><p>  food=createFood();</p><p>  matrix[food.x][food.y]=true;</p><p>  return true;</p><p><b>  }<

66、;/b></p><p>  else return false;// 撞到身體</p><p><b>  }</b></p><p>  else//什么都沒有碰到</p><p><b>  {</b></p><p>  nodeArray.addFirst(n

67、ew Node(x,y));// 加上頭部</p><p>  matrix[x][y]=true;</p><p>  n=(Node)nodeArray.removeLast();// 去掉尾部</p><p>  matrix[n.x][n.y]=false;</p><p>  countMove++;</p><

68、p>  return true;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return false;//越界(撞到墻壁)</p><p><b>  }</b></p><p>  //r

69、un():貪吃蛇運動線程</p><p>  public void run()</p><p><b>  {</b></p><p>  running=true;</p><p>  while(running)</p><p><b>  {</b></p>

70、;<p><b>  try</b></p><p><b>  {</b></p><p>  Thread.sleep(timeInterval);</p><p>  }catch(Exception e)</p><p><b>  {</b></p

71、><p><b>  break;</b></p><p><b>  }</b></p><p>  if(!paused)</p><p><b>  {</b></p><p>  if(moveOn())// 未結(jié)束</p><p

72、><b>  {</b></p><p>  gs.repaint();</p><p><b>  }</b></p><p>  else//游戲結(jié)束</p><p><b>  {</b></p><p>  JOptionPane.show

73、MessageDialog(null,"GAME OVER",</p><p>  "Game Over",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  break;</b></p><p><b>  }</b></p>

74、<p><b>  }</b></p><p><b>  }</b></p><p>  running=false;</p><p><b>  }</b></p><p>  //createFood():生成食物及放置地點</p><p

75、>  private Node createFood()</p><p><b>  {</b></p><p><b>  int x=0;</b></p><p><b>  int y=0;</b></p><p><b>  do</b>&l

76、t;/p><p><b>  {</b></p><p>  Random r=new Random();</p><p>  x=r.nextInt(maxX);</p><p>  y=r.nextInt(maxY);</p><p>  }while(matrix[x][y]);</p&g

77、t;<p>  return new Node(x,y);</p><p><b>  }</b></p><p>  //speedUp():加快蛇運動速度</p><p>  public void speedUp()</p><p><b>  {</b></p>

78、<p>  timeInterval*=speedChangeRate;</p><p><b>  }</b></p><p>  //speedDown():放慢蛇運動速度</p><p>  public void speedDown()</p><p><b>  {</b><

79、;/p><p>  timeInterval/=speedChangeRate;</p><p><b>  }</b></p><p>  //changePauseState(): 改變游戲狀態(tài)(暫停或繼續(xù))</p><p>  public void changePauseState()</p><

80、p><b>  {</b></p><p>  paused=!paused;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  四、運行結(jié)果</b></p><p>

81、<b>  五、設(shè)計體會</b></p><p>  通過努力,我們完成了貪吃蛇游戲的程序,實現(xiàn)了它的預(yù)期的功能,能夠通過鍵盤上的上下左右鍵控制貪吃蛇的運動。這是圖形界面類的程序設(shè)計,我們對其有了更深層次的了解,還用到了數(shù)組和結(jié)點等知識。本次課程設(shè)計,使我們把書本上的知識運用到實踐上,進(jìn)一步鞏固了所學(xué)。更使我們了解到Java的強大功能,因為手機上的很多其他程序也都是用Java編寫的。通過本次

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論