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

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計報告</b></p><p>  課程設(shè)計題目: GUI小游戲的設(shè)計與實(shí)現(xiàn) </p><p>  學(xué) 院: 計算機(jī)學(xué)院 </p><p>  專業(yè)班級: 網(wǎng)絡(luò)2班 </p>

2、<p>  年 級: </p><p>  姓 名: </p><p>  學(xué) 號 </p><p>  完成時間: 2013 年 12

3、 月 26 日</p><p>  成 績: </p><p>  指導(dǎo)教師: </p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  說明:學(xué)院、專業(yè)、年級均填全稱,如:計

4、算機(jī)學(xué)院、計算機(jī)科學(xué)與技術(shù)、2010。</p><p><b>  課程設(shè)計正文</b></p><p><b>  主要內(nèi)容包括:</b></p><p><b>  需求分析:</b></p><p>  隨著人們生活水平的提高,人們更加注重休閑娛樂,休閑小游戲更是大多數(shù)人

5、的不二選擇。本次課程設(shè)計,本小組設(shè)計了一個考驗反應(yīng)能力的小游戲,意在休閑娛樂的同時鍛煉玩家的反應(yīng)能力,界面休閑簡單,適合消遣。</p><p>  本次課程設(shè)計通過Qt,以及C++的編程語言,編寫一個“喜羊羊與灰太狼”游戲,即在界面的畫布中,用鼠標(biāo)操作控制喜羊羊,躲避不斷隨機(jī)移動的灰太狼并尋找隨機(jī)出現(xiàn)的食物(青草),并同時計時和記分,分?jǐn)?shù)由時間分?jǐn)?shù)與食物分?jǐn)?shù)合成,當(dāng)喜羊羊撞上灰太狼或者碰到邊界時,游戲結(jié)束,如果分

6、數(shù)高,可以進(jìn)入排行榜。界面清晰簡單,易于上手。</p><p>  系統(tǒng)設(shè)計(類圖、模塊圖等)</p><p><b>  設(shè)計模塊圖:</b></p><p><b>  游戲截圖:</b></p><p><b>  關(guān)鍵代碼描述</b></p><p&

7、gt;<b>  主函數(shù):</b></p><p>  #include <QtGui/QApplication></p><p>  #include "mainwindow.h"</p><p>  #include "Help.h"</p><p>  //#in

8、clude <QSound></p><p>  int main(int argc, char *argv[])</p><p><b>  {</b></p><p>  QApplication a(argc, argv);</p><p>  ReactionGame w;</p>&l

9、t;p>  w.LoadResources();</p><p>  w.showFullScreen();</p><p><b>  w.show();</b></p><p>  Help help;</p><p>  help.exec();</p><p>  return a.

10、exec();</p><p><b>  }</b></p><p><b>  主窗口函數(shù)</b></p><p><b>  #include </b></p><p>  “mainwindow.h"</p><p>  #includ

11、e <QDebug></p><p>  #include <QResizeEvent></p><p>  #include <QFont></p><p>  ReactionGame::ReactionGame(QWidget *parent) :</p><p>  QWidget(parent)&

12、lt;/p><p><b>  {</b></p><p>  QTextCodec::setCodecForTr(QTextCodec::codecForLocale());</p><p>  timer=new QTimer(this);</p><p>  //DrawEngine();</p><

13、;p>  connect(timer,SIGNAL(timeout()),SLOT(DrawEngine()));</p><p>  lcd = new QLCDNumber(this);</p><p>  ranking = new QPushButton(tr("排行榜"),this);</p><p>  //Quitgame =

14、 new QPushButton(tr("退出"),this);</p><p>  //connect(Quitgame,SIGNAL(clicked()),this,SLOT(quit()));</p><p>  connect(ranking,SIGNAL(clicked()),this,SLOT(CreatRankingList()));</p>

15、<p>  //t= QTime::currentTime();</p><p>  // order = new QAction(tr("&Order"),this);</p><p>  // QToolBar *toolbar = addToolBar(tr("&order"));</p><p&

16、gt;  // toolbar ->addAction(order);</p><p>  /*QPalette palette;</p><p>  QPixmap pixmap(":/1.png");</p><p>  palette.setBrush(backgroundRole(),QBrush(pixmap));</p&g

17、t;<p>  setPalette(palette);*/</p><p>  //lcd1 = new QLCDNumber(this);</p><p><b>  }</b></p><p>  ReactionGame::~ReactionGame()</p><p><b>  {&l

18、t;/b></p><p><b>  }</b></p><p>  void ReactionGame::LoadResources()//載入資源</p><p><b>  {</b></p><p>  block1=new BlockAttr(QPixmap(":/1.p

19、ng"));</p><p>  block2=new BlockAttr(QPixmap(":2.png"));</p><p>  block3=new BlockAttr(QPixmap(":/3.png"));</p><p>  dropBlock=new BlockAttr(QPixmap(":

20、/drop"));</p><p>  block4=new BlockAttr(QPixmap(":/4.png"));</p><p>  food = new BlockAttr(QPixmap(":/food.png"));</p><p>  this->inilizetionGame();</

21、p><p><b>  }</b></p><p>  void ReactionGame::ReleaseResources()//釋放資源</p><p><b>  {</b></p><p>  delete block1;</p><p>  delete block2

22、;</p><p>  delete block3;</p><p>  delete block4;</p><p>  delete food;</p><p>  delete dropBlock;</p><p><b>  }</b></p><p>  void

23、 ReactionGame::inilizetionGame()//初始化游戲</p><p><b>  {</b></p><p>  QSound backMusic("backmusic.wav");</p><p>  backMusic.play();</p><p>  setCurso

24、r(Qt::ArrowCursor);</p><p>  ranking->setGeometry(rect().x()+150,rect().y(),100,30);</p><p>  //Quitgame ->setGeometry(rect().x()+1300,rect().y(),100,30);</p><p>  qsrand(t.ms

25、ec()+t.second()*1000);</p><p>  foodWidth = qrand()%5;</p><p>  if(foodWidth == 0)</p><p>  foodWidth = 1;</p><p>  qsrand(t.msec()+t.second()*500);</p><p>

26、;  foodHeight = qrand()%5;</p><p>  if(foodHeight == 0)</p><p>  foodHeight = 1;</p><p>  food ->point.setX(1000/foodWidth);</p><p>  food ->point.setY(600/foodHe

27、ight);</p><p>  block1 ->point.setX(this->width()/2);</p><p>  block1 ->point.setY(0);</p><p>  block2 ->point.setX(0);</p><p>  block2 ->point.setY(this

28、->height()/2);</p><p>  block3 ->point.setX(this->width()/2);</p><p>  block3 ->point.setY(this->height()-block3->pixmap.height());</p><p>  block4 ->point.setX

29、(this->width()-block4->pixmap.width());</p><p>  block4 ->point.setY(this->height()/2);</p><p>  dropBlock ->point.setX(this->width()/2);</p><p>  dropBlock ->p

30、oint.setY(this->height()/2);</p><p>  validRect.setX(100);</p><p>  validRect.setY(100);</p><p>  validRect.setWidth(this->width()-200);</p><p>  validRect.setHei

31、ght(this->height()-200);</p><p>  counter=1;</p><p><b>  factor=1;</b></p><p><b>  speed=2;</b></p><p><b>  score=0;</b></p>

32、;<p><b>  }</b></p><p>  void ReactionGame::paintEvent(QPaintEvent *)</p><p><b>  {</b></p><p>  t= QTime::currentTime();</p><p>  painte

33、r=new QPainter(this);</p><p>  painter->setRenderHint(QPainter::Antialiasing);</p><p>  //painter->setPen(Qt::white);</p><p>  //painter->setBrush(Qt::white);</p>&l

34、t;p>  QPalette palette;</p><p>  QPixmap pixmap(":/back.jpg");</p><p>  palette.setBrush(backgroundRole(),QBrush(pixmap));</p><p>  setPalette(palette);</p><

35、p>  painter->drawRect(this->rect());</p><p>  painter->setPen(Qt::yellow);</p><p>  painter ->setBrush(Qt::white);</p><p>  //painter->setBrush(QColor(0xff,0x9d-sp

36、eed*5,0x6f));</p><p>  painter->drawRect(this->validRect);</p><p>  painter->setPen(Qt::yellow);</p><p>  painter->setFont(QFont("Helvetica",12,QFont::Bold));&

37、lt;/p><p>  painter->drawText(this->width()/4,20,tr("Your score:")+QString::number(score));</p><p>  painter->drawPixmap(block1->point,block1->pixmap);</p><p>

38、  painter->drawPixmap(block2->point,block2->pixmap);</p><p>  painter->drawPixmap(block3->point,block3->pixmap);</p><p>  painter->drawPixmap(block4->point,block4->pix

39、map);</p><p>  painter->drawPixmap(food->point,food->pixmap);</p><p>  painter->drawPixmap(dropBlock->point,dropBlock->pixmap);</p><p>  delete painter;</p>

40、<p>  this->update();</p><p><b>  }</b></p><p>  void ReactionGame::mouseMoveEvent(QMouseEvent *e)</p><p><b>  {</b></p><p>  dropBlock

41、->point.setX(e->pos().x()-dropBlock->pixmap.width()/2);</p><p>  dropBlock->point.setY(e->pos().y()-dropBlock->pixmap.height()/2);</p><p><b>  }</b></p><

42、p>  void ReactionGame::mousePressEvent(QMouseEvent *e)</p><p><b>  {</b></p><p>  if(e->type()==QMouseEvent::MouseButtonPress){</p><p>  setCursor(Qt::ClosedHandCu

43、rsor);</p><p>  QPoint begin=dropBlock->point;</p><p>  QPoint end(dropBlock->point.x()+dropBlock->pixmap.size().width(),dropBlock->point.y()+dropBlock->pixmap.size().height());&l

44、t;/p><p>  if(begin.x()<=e->pos().x()&&begin.y()<=e->pos().y()&&end.x()>=e->pos().x()&&end.y()>=e->pos().y()){</p><p>  timer->start(1);</p>

45、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void ReactionGame::mouseReleaseEvent(QMouseEvent *e)</p><p><b

46、>  {</b></p><p>  if(e->type()==QMouseEvent::MouseButtonRelease)</p><p><b>  {</b></p><p>  this->ResetGame();</p><p><b>  }</b>&

47、lt;/p><p><b>  }</b></p><p>  void ReactionGame::DrawEngine()//繪制引擎</p><p><b>  {</b></p><p>  score += 1;</p><p>  //score=float(spee

48、d*counter)/350;//顯示分?jǐn)?shù)</p><p>  for(int i=0;i<speed;++i)</p><p><b>  {</b></p><p>  CalculatePos(block1);</p><p>  CalculatePos(block2);</p><p&

49、gt;  CalculatePos(block3);</p><p>  CalculatePos(block4);</p><p>  //CalculatePos(food);</p><p>  if(HasCollide(dropBlock,block1)||HasCollide(dropBlock,block2)||</p><p>

50、;  HasCollide(dropBlock,block3)||HasCollide(dropBlock,block4)||!this->CheckValidBound(dropBlock))//如果產(chǎn)生碰撞</p><p><b>  {</b></p><p>  QMessageBox::about(NULL,"Game Over",

51、GetIQHint(score));</p><p>  //GameOver over;</p><p>  //over.exec();</p><p>  this->changeFile(score);</p><p>  this->ResetGame();</p><p><b>  

52、}</b></p><p>  if(HasCollide(dropBlock,food)) //加入食物</p><p><b>  {</b></p><p>  score += 150;</p><p>  delete food;</p><p>

53、;  food = new BlockAttr(QPixmap(":/food.png"));</p><p>  qsrand(t.msec()+t.second()*1000);</p><p>  foodWidth = qrand()%5;</p><p>  if(foodWidth == 0)</p><p>

54、  foodWidth = 1;</p><p>  qsrand(t.msec()+t.second()*500);</p><p>  foodHeight = qrand()%5;</p><p>  if(foodHeight == 0)</p><p>  foodHeight = 1;</p><p>  

55、food ->point.setX(800/foodWidth);</p><p>  food ->point.setY(600/foodHeight);</p><p><b>  }</b></p><p><b>  }</b></p><p>  counter++;</

56、p><p>  lcd ->display((double)counter/100);</p><p>  //lcd1 ->display(score);</p><p>  if(counter%500==0)//每五秒提升一次速度</p><p><b>  {</b></p><p&g

57、t;<b>  speed+=1;</b></p><p><b>  }</b></p><p>  if(counter%1000==0)//每十秒縮小有效范圍</p><p><b>  {</b></p><p>  NarrowValidRect(&this-

58、>validRect);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void ReactionGame::ResetGame()//重置游戲</p><p><b>  {</b></p><p

59、>  QSound backMusic("backmusic.wav");</p><p>  backMusic.play();</p><p>  timer->stop();</p><p>  this->inilizetionGame();</p><p>  this->rank.rea

60、dfile("RankingList.txt");</p><p>  this->update();</p><p><b>  }</b></p><p>  void ReactionGame::CalculatePos(BlockAttr *block)//計算位置</p><p>&l

61、t;b>  {</b></p><p>  int x=block->point.x();</p><p>  int y=block->point.y();</p><p><b>  if(x==0)</b></p><p><b>  {</b></p>

62、;<p>  block->xDecrease=false;</p><p>  }else if(x+block->pixmap.width()==this->width())</p><p><b>  {</b></p><p>  block->xDecrease=true;</p>

63、<p><b>  }</b></p><p><b>  if(y==0)</b></p><p><b>  {</b></p><p>  block->yDecrease=false;</p><p>  }else if(y+block->pix

64、map.width()==this->height())</p><p><b>  {</b></p><p>  block->yDecrease=true;</p><p><b>  }</b></p><p>  if(block->xDecrease)</p>

65、;<p><b>  {</b></p><p>  block->point.setX(x-factor);</p><p><b>  }else</b></p><p><b>  {</b></p><p>  block->point.set

66、X(x+factor);</p><p><b>  }</b></p><p>  if(block->yDecrease)</p><p><b>  {</b></p><p>  block->point.setY(y-factor);</p><p>&

67、lt;b>  }else</b></p><p><b>  {</b></p><p>  block->point.setY(y+factor);</p><p><b>  }</b></p><p><b>  }</b></p>

68、<p>  const QString ReactionGame::GetIQHint(const float score)</p><p><b>  {</b></p><p>  // QTextCodec::setCodecForTr(QTextCodec::codecForLocale());</p><p>  if(sc

69、ore<3000)</p><p>  return tr("呵呵, 你太年輕了");</p><p>  else if(score>3000&&score<=4000)</p><p>  return tr("你的反應(yīng)是硬傷");</p><p>  else i

70、f(score>4000&&score<=5000)</p><p>  return tr("我開始承認(rèn)你的智商了");</p><p>  else if(score>5000&&score<=6000)</p><p>  return tr("你一定看過牛奶可樂經(jīng)濟(jì)學(xué),不然

71、你不可能這么牛逼");</p><p>  else if(score>6000)</p><p>  return tr("老師,你都玩到6000分了,說明游戲不錯,請給好評");</p><p><b>  }</b></p><p>  bool ReactionGame::Ha

72、sCollide(const BlockAttr *staticBlock, const BlockAttr *dynamicBlock)//是否產(chǎn)生碰撞</p><p><b>  {</b></p><p>  QPoint staticCenter(staticBlock->point.x()+staticBlock->pixmap.width()/

73、2,staticBlock->point.y()+staticBlock->pixmap.height()/2);//計算中心點(diǎn)</p><p>  QPoint dynamicCenter(dynamicBlock->point.x()+dynamicBlock->pixmap.width()/2,dynamicBlock->point.y()+dynamicBlock->p

74、ixmap.height()/2);</p><p>  int staticWidth=staticBlock->pixmap.width();//計算矩形寬度和高度</p><p>  int staticHeiget=staticBlock->pixmap.height();</p><p>  int dynamicWidth=dynamicBl

75、ock->pixmap.width();</p><p>  int dynamicHeight=dynamicBlock->pixmap.height();</p><p>  int xDistance=abs(staticCenter.x()-dynamicCenter.x());//計算。兩個矩形中心點(diǎn)的距離</p><p>  int yDis

76、tance=abs(staticCenter.y()-dynamicCenter.y());</p><p>  if((staticWidth+dynamicWidth)/2>=xDistance&&(staticHeiget+dynamicHeight)/2>=yDistance)//計算是否產(chǎn)生碰撞</p><p><b>  {</b&g

77、t;</p><p>  return true;</p><p><b>  }</b></p><p>  return false;</p><p><b>  }</b></p><p>  bool ReactionGame::CheckValidBound(con

78、st BlockAttr *block)//驗證是否在有效范圍</p><p><b>  {</b></p><p>  QPoint blockCenter(block->point.x()+block->pixmap.width()/2,block->point.y()+block->pixmap.height()/2);//計算中心點(diǎn)&

79、lt;/p><p>  QPoint rectCenter(validRect.x()+validRect.width()/2,validRect.y()+validRect.height()/2);</p><p>  int xDistance=validRect.width()/2;//計算中心到無效區(qū)域的距離</p><p>  int yDistance=va

80、lidRect.height()/2;</p><p>  if(abs(blockCenter.x()-rectCenter.x())+block->pixmap.width()/2-2>=xDistance||abs(blockCenter.y()-rectCenter.y())+block->pixmap.height()/2-2>=yDistance)</p><

81、;p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  void Reactio

82、nGame::NarrowValidRect(QRect *rect)//縮小矩形</p><p><b>  {</b></p><p>  int narrowFactor=10;</p><p>  rect->setX(rect->x()+narrowFactor);</p><p>  rect-&

83、gt;setY(rect->y()+narrowFactor);</p><p>  rect->setWidth(rect->width()-narrowFactor);</p><p>  rect->setHeight(rect->height()-narrowFactor);</p><p><b>  }</b

84、></p><p>  void ReactionGame::CreatRankingList(){</p><p>  rank.exec();</p><p><b>  }</b></p><p>  void ReactionGame::changeFile(const float score){</

85、p><p>  for(unsigned int a = 1;a < 10;a += 2){</p><p>  QString temp = this->rank.name[a];</p><p>  float temp1 = temp.toFloat();</p><p>  if(score > temp1){</

86、p><p>  Dialog edit;</p><p>  edit.exec();</p><p>  QString text = edit.getString();</p><p>  for(unsigned int b = 9,num = 0;num < (9 - a) / 2;b -= 2,num++){</p>

87、<p>  this->rank.name[b-1] = this->rank.name[b-3];</p><p>  this->rank.name[b] = this->rank.name[b-2];</p><p><b>  }</b></p><p>  this->rank.name[a-

88、1] = text;</p><p>  this->rank.name[a] = QString("%1").arg(score);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }<

89、/b></p><p>  QFile f("RankingList.txt");</p><p>  if(!f.open(QIODevice::WriteOnly | QIODevice::Text)){</p><p>  qDebug()<<"error"<<endl;</p>

90、<p><b>  return;</b></p><p><b>  }</b></p><p>  QTextStream s(&f);</p><p>  for(unsigned int c = 0;c < 10;c++)</p><p>  s<<t

91、his->rank.name[c]<<"\r\n";</p><p>  f.close();</p><p><b>  }</b></p><p><b>  系統(tǒng)測試報告</b></p><p>  本項目經(jīng)多次測試,除程序啟動時以及排行榜處存在一些對程序

92、無大影響的小bug,其余部分基本完全無誤,程序運(yùn)行良好。本小組成員也會在之后的空余時間對本程序進(jìn)行完善修改。</p><p><b>  運(yùn)行效果</b></p><p>  游戲性高,畫面體驗較好,整體設(shè)計相對完善,能在電腦里良好的運(yùn)行,具有較好的兼容性,背景音樂和圖片的加入使游戲更加人性化,具體效果圖見附帶PPt。</p><p><

93、b>  總結(jié)</b></p><p>  通過本次游戲項目的編寫,更加熟練的掌握了Qt的使用方法以及C++編程的技術(shù),提高了團(tuán)隊合作的能力,過程雖然艱苦,但是結(jié)果也讓我們十分滿意。當(dāng)然,由于時間,技術(shù)有限,難免有不足之處,我們會在今后的學(xué)習(xí)中不斷總結(jié)經(jīng)驗,不斷提高自己,提高項目質(zhì)量。</p><p><b>  備注:</b></p>

94、<p>  學(xué)生:提交的課程設(shè)計報告電子文檔命名為:“組號(2位數(shù)字)年級(兩位數(shù)字不要“級”字)專業(yè)(縮寫:計算機(jī)科學(xué)與技術(shù)專業(yè)(計科)、網(wǎng)絡(luò)工程專業(yè)(網(wǎng)絡(luò))、信息安全專業(yè)(信息)、物聯(lián)網(wǎng)工程(物聯(lián)網(wǎng)))項目組成員(學(xué)號(八位數(shù)字)姓名).doc。如第1組,專業(yè)為“計算機(jī)科學(xué)與技術(shù)”專業(yè),項目組成員有:張三(學(xué)號20115676),李四(學(xué)號20115676),王五(學(xué)號20115676),完成的課程設(shè)計報告命名為:01_1

溫馨提示

  • 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

提交評論