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

下載本文檔

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

文檔簡介

1、<p><b>  C#課程實(shí)訓(xùn)報(bào)告</b></p><p>  ( 2013 -- 2014 年度第 1 學(xué)期)</p><p> 專業(yè)軟件工程</p><p> 學(xué)生姓名</p><p> 班級</p><p> 學(xué)號</p><p> 指導(dǎo)教師</p&

2、gt;<p> 完成日期</p><p><b>  目 錄</b></p><p><b>  目 錄2</b></p><p><b>  1 設(shè)計(jì)目的1</b></p><p><b>  2 設(shè)計(jì)內(nèi)容1</b><

3、;/p><p><b>  3 實(shí)現(xiàn)方法1</b></p><p>  3.1 程序概述1</p><p>  3.2 游戲的概要設(shè)計(jì)3</p><p>  3.3 游戲的詳細(xì)設(shè)計(jì)及編碼4</p><p>  3.4 開發(fā)環(huán)境33</p><p>  4 小 結(jié)

4、34</p><p><b>  C#課程實(shí)訓(xùn)報(bào)告</b></p><p>  1 設(shè)計(jì)目的 </p><p>  本課程設(shè)計(jì)是在學(xué)完教學(xué)大綱規(guī)定的全部內(nèi)容、完成所有實(shí)踐環(huán)節(jié)的基礎(chǔ)上,旨在深化學(xué)生學(xué)習(xí)的C#語言課程基本知識,進(jìn)一步掌握C#語言程序設(shè)計(jì)方法,提高分析問題、解決問題的綜合應(yīng)用能力。</p><p&

5、gt;<b>  2 設(shè)計(jì)內(nèi)容</b></p><p>  俄羅斯方塊游戲的編制。</p><p><b>  3 實(shí)現(xiàn)方法</b></p><p><b>  3.1 程序概述</b></p><p>  3.1.1 游戲的功能 </p><p> 

6、 它的基本功能就是要求玩家先登錄窗體輸入用戶名(ldq)和密碼(afafa),如果正確則登錄游戲,如果輸錯三次則退出游戲。</p><p>  登錄游戲后玩家通過移動或旋轉(zhuǎn)自己窗口內(nèi)落下的方塊,方塊在一行堆滿后就可以消掉;如果方塊堆積至窗口頂端,則游戲結(jié)束。</p><p>  系統(tǒng)默認(rèn)設(shè)置使用右邊的窗口,用光標(biāo)操作:左箭頭左移一格,右箭頭右移一格,上箭頭旋轉(zhuǎn)方塊,下箭頭方塊丟下。用戶還可

7、以定義自己習(xí)慣的按鍵來操作游戲。</p><p>  3.1.2 游戲的預(yù)覽</p><p>  游戲運(yùn)行的登錄窗口如圖3-1所示。</p><p><b>  圖3-1 登錄窗體</b></p><p>  游戲運(yùn)行的主操作界面如圖3-2所示。</p><p><b>  圖3-2主操

8、作界面</b></p><p>  單擊[設(shè)置]按鈕,出現(xiàn)一個對話框,可以設(shè)置游戲規(guī)則。在操作設(shè)置界面中可以進(jìn)行鍵盤設(shè)置,還可以進(jìn)行環(huán)境設(shè)置,設(shè)置游戲的難度。操作界面如圖3-3所示。</p><p>  圖3-3 操作設(shè)置界面</p><p>  [開始級別](默認(rèn)是一級),級別是1-10,級別越高方塊下落速度越快。</p><p&g

9、t;  3.2 游戲的概要設(shè)計(jì)</p><p>  3.2.1 游戲?qū)崿F(xiàn)方案</p><p>  屏幕上有一個X列Y層的區(qū)域,計(jì)算機(jī)自動產(chǎn)生多重不同形狀的方塊,并出現(xiàn)在區(qū)域的最頂端;然后每過一個固定時間向下落一層,玩家可以使用鍵盤控制方塊向三個方向移動和順(逆)時針旋轉(zhuǎn)90°。不過前提是方塊移動和旋轉(zhuǎn)后的位置是空的,并且碰觸不到提前設(shè)置好的邊界。當(dāng)方塊落到區(qū)域底部或者另一個方塊之

10、上是將停止移動。該方塊降落后檢查每行是否有滿行的現(xiàn)象,如果有,這一行全部取消方塊,將上一層的方塊重新畫到這一層。隨后新的方塊產(chǎn)生,當(dāng)新方塊無處放置時,游戲結(jié)束。</p><p>  3.3.2 游戲邏輯設(shè)計(jì)</p><p>  首先是定義與游戲相關(guān)的數(shù)據(jù)的存儲方法,分為兩個主要的部分:一個是當(dāng)前的方塊,需要保存位置、當(dāng)前的旋轉(zhuǎn)狀態(tài);另一個是屏幕區(qū)域的狀態(tài),這可以用一個二維數(shù)組來表示。<

11、;/p><p>  其次,分析得到按鍵的含義,做出響應(yīng),響應(yīng)模塊:“左”、“右”、“下”、“移動”和“旋轉(zhuǎn)”幾個模塊,負(fù)責(zé)改變當(dāng)前方塊的狀態(tài)的數(shù)據(jù);畫方塊模塊:位置移動后,把方塊畫到新的位置上;檢查模塊:在每次改變狀態(tài)之前,對方塊企圖占用的區(qū)域進(jìn)行檢查。如果無處可放,則此次移動失敗。如果方塊到區(qū)域底端了,則應(yīng)該固定在當(dāng)前位置,這可以調(diào)用前面的畫方塊模塊來實(shí)現(xiàn),同時再再產(chǎn)生一個方塊。這樣還需要寫一個產(chǎn)生方塊的模塊。每次

12、當(dāng)方塊到底的時候,都需要檢查一下是否有新的層排滿了,如果有,則應(yīng)該消層。這就又需要寫兩個模塊,檢車是否排滿和消層。產(chǎn)生新方塊時也需要檢查其產(chǎn)生的位置,如果這個位置已被占用,則游戲結(jié)束,這需要調(diào)用前面的檢查模塊來實(shí)現(xiàn)。</p><p>  最后檢查系統(tǒng)時間,規(guī)定每過一個指定時間間隔就調(diào)用一次方塊下落模塊。</p><p>  3.3 游戲的詳細(xì)設(shè)計(jì)及編碼</p><p&g

13、t;  3.3.1 主界面設(shè)計(jì)編碼</p><p>  主界面的作用就是顯示本游戲所有的功能菜單項(xiàng),提供游戲的而顯示界面。在本界面中共設(shè)計(jì)了5種控件,通過這些控件,玩家可以方便的控制游戲,各個控件的名稱、作用和類型如表3-1所示。</p><p>  表3-1 主界面的控件設(shè)計(jì)</p><p>  另外,在界面中還設(shè)置了1個TextBox控件。在界面操作中,把焦點(diǎn)一

14、直防止在這個控件上,方便用戶用鍵盤操作游戲方塊。</p><p>  在游戲中需要保存用戶自定義的一些設(shè)置,本游戲中把設(shè)置保存到setting.cob文件中,并在游戲加載的時候調(diào)用。主界面Load事件的代碼如例程3-1所示,游戲設(shè)置保存代碼如例程3-2所示。</p><p>  例程3-1 主界面Load代碼,用到Initiate函數(shù)進(jìn)行操作設(shè)置初始化。</p><p&

15、gt;  private void Form1_Load(object sender, EventArgs e)</p><p><b>  {</b></p><p>  this.Initiate();</p><p><b>  }</b></p><p>  private void Ini

16、tiate()</p><p><b>  {</b></p><p><b>  try</b></p><p><b>  {</b></p><p>  XmlDocument doc = new XmlDocument();</p><p>  

17、doc.Load("c:\\setting.ini");</p><p>  XmlNodeList nodes = doc.DocumentElement.ChildNodes;</p><p>  this.startLevel = Convert.ToInt32(nodes[0].InnerText);</p><p>  keys = n

18、ew Keys[5];</p><p>  for (int i = 0; i < nodes[2].ChildNodes.Count; i++)</p><p><b>  {</b></p><p>  KeysConverter kc = new KeysConverter();</p><p>  this

19、.keys[i] = (Keys)(kc.ConvertFromString(nodes[2].ChildNodes[i].InnerText));</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  catch</b></p>&

20、lt;p><b>  {</b></p><p>  this.trans = false;</p><p>  keys = new Keys[5];</p><p>  keys[0] = Keys.Left;</p><p>  keys[1] = Keys.Right;</p><p&g

21、t;  keys[2] = Keys.Down;</p><p>  keys[3] = Keys.Up;</p><p>  keys[4] = Keys.Space;</p><p>  this.level = 1;</p><p>  this.startLevel = 1;</p><p><b>

22、  }</b></p><p>  this.timer1.Interval = 500 - 50 * (level - 1);//時鐘</p><p>  this.label1.Text = "級別: " + this.startLevel;</p><p>  if (trans)</p><p><

23、;b>  {</b></p><p>  this.TransparencyKey = Color.Black;</p><p><b>  }</b></p><p><b>  }</b></p><p>  [設(shè)置]按鈕是進(jìn)入操作設(shè)置,代碼如下</p><

24、p>  private void button2_Click_1(object sender, EventArgs e)</p><p><b>  {</b></p><p>  if(!paused)</p><p><b>  {</b></p><p>  this.atPause=D

25、ateTime.Now;</p><p>  this.paused=true;</p><p>  this.timer1.Stop();</p><p><b>  }</b></p><p>  sform.SetOptions(this.keys,this.startLevel,this.trans);</

26、p><p>  sform.DialogResult=DialogResult.Cancel;</p><p>  sform.ShowDialog();</p><p>  if(sform.DialogResult==DialogResult.OK)</p><p><b>  {</b></p><

27、p>  sform.GetOptions(ref this.keys,ref this.startLevel,ref this.trans);</p><p>  this.level=this.startLevel;</p><p>  this.label1.Text="級別 "+this.level;</p><p>  this.

28、timer1.Interval=500-50*(level-1);</p><p>  if(this.trans)</p><p><b>  {</b></p><p>  this.TransparencyKey=Color.Black;</p><p><b>  }</b></p&g

29、t;<p><b>  else</b></p><p>  this.TransparencyKey=Color.Transparent;</p><p><b>  }</b></p><p>  this.paused=false;</p><p>  this.pauseTim

30、e+=DateTime.Now-this.atPause;</p><p>  this.timer1.Start();</p><p>  this.textBox1.Focus();</p><p><b>  }</b></p><p>  [開始]按鈕的事件是設(shè)置label的顯示文本、開始計(jì)時和時間間隔,并調(diào)用生

31、成方塊的函數(shù)。主要代碼如例程3-3所示。</p><p>  例程[開始]按鈕事件代碼</p><p>  private void Start()</p><p><b>  {</b></p><p>  this.block = null;</p><p>  this.nextBlock

32、= null;</p><p>  this.label4.Text = “手速”: 0";</p><p>  this.label3.Text = “塊數(shù)”: 0";</p><p>  this.label2.Text = “行數(shù)”: 0";</p><p>  this.label5.Text = “成

33、績”: 0";</p><p>  this.score = 0;</p><p>  this.label1.Text = "級別”: " + this.startLevel;</p><p>  this.level = this.startLevel;</p><p>  this.timer1.Inter

34、val = 500 - 50 * (level - 1);//方塊生成的時間間隔</p><p>  this.paused = false;</p><p>  this.failed = false;</p><p>  this.panel1.Invalidate();</p><p>  this.panel2.Invalidate(

35、);</p><p>  this.nextShapeNO = 0;</p><p>  this.CreateBlock();//生成當(dāng)前方塊</p><p>  this.CreateNextBlock();</p><p>  this.timer1.Enabled = true;</p><p>  this.

36、atStart = DateTime.Now;</p><p>  this.pauseTime = new TimeSpan(0);</p><p><b>  }</b></p><p>  [暫停]按鈕的事件是對計(jì)時器進(jìn)行暫??刂疲绻呀?jīng)處于暫停狀態(tài),則計(jì)時器開始計(jì)時</p><p>  private void

37、 button3_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  if (!this.failed)</p><p><b>  {</b></p><p>  if (paused)</p><p&

38、gt;<b>  {</b></p><p>  this.pauseTime += DateTime.Now - this.atPause;</p><p>  paused = false;</p><p>  this.timer1.Start();</p><p><b>  }</b>&l

39、t;/p><p><b>  else</b></p><p><b>  {</b></p><p>  this.atPause = DateTime.Now;</p><p>  paused = true;</p><p>  this.timer1.Stop();<

40、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  this.textBox1.Focus();</p><p><b>  }</b></p><p>  [其他]還有需要一些函數(shù)輔助這些控件才能完成功能:在

41、Start函數(shù)中,需要調(diào)用一個函數(shù)創(chuàng)建新方塊(creatblock)和如果能夠順利執(zhí)行將調(diào)用的創(chuàng)建下一個方塊(creatnextblock)</p><p>  private bool CreateBlock()</p><p><b>  {</b></p><p>  Point firstPos;</p><p>

42、;  Color color;</p><p>  if (this.nextShapeNo == 0)</p><p><b>  {</b></p><p>  Random rand = new Random();</p><p>  this.nextShapeNo = rand.Next(1, 8);</

43、p><p><b>  }</b></p><p>  switch (this.nextShapeNo)</p><p><b>  {</b></p><p>  case 1://田</p><p>  firstPos = new Point(4, 0);</p&g

44、t;<p>  color = Color.Turquoise;</p><p><b>  break;</b></p><p>  case 2://一</p><p>  firstPos = new Point(3, 0);</p><p>  color = Color.Red;</p>

45、;<p><b>  break;</b></p><p>  case 3://土</p><p>  firstPos = new Point(4, 0);</p><p>  color = Color.Silver;</p><p><b>  break;</b></p

46、><p>  case 4://z</p><p>  firstPos = new Point(4, 0);</p><p>  color = Color.LawnGreen;</p><p><b>  break;</b></p><p>  case 5://倒z</p>&l

47、t;p>  firstPos = new Point(4, 1);</p><p>  color = Color.DodgerBlue;</p><p><b>  break;</b></p><p>  case 6://L</p><p>  firstPos = new Point(4, 0);</

48、p><p>  color = Color.Yellow;</p><p><b>  break;</b></p><p>  default://倒L</p><p>  firstPos = new Point(4, 0);</p><p>  color = Color.Salmon;<

49、/p><p><b>  break;</b></p><p><b>  }</b></p><p>  if (this.block == null)</p><p><b>  {</b></p><p>  block = new Block(thi

50、s.panel1, 9, 19, 25, this.nextShapeNo, firstPos, color);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if (!bloc

51、k.GeneBlock(this.nextShapeNo, firstPos, color))</p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p&g

52、t;<p>  block.EraseLast();</p><p>  block.Move(2);</p><p>  return true;</p><p><b>  }</b></p><p>  private void CreateNextBlock()</p><p&g

53、t;<b>  {</b></p><p>  Random rand = new Random();</p><p>  this.nextShapeNo = rand.Next(1, 8);</p><p>  Point firstpos;</p><p>  Color color;</p><

54、;p>  switch (this.nextShapeNo)</p><p><b>  {</b></p><p>  case 1://田¬?</p><p>  firstpos = new Point(1, 0);</p><p>  color = Color.Turquoise;</p&

55、gt;<p><b>  break;</b></p><p>  case 2://一°?</p><p>  firstpos = new Point(0, 1);</p><p>  color = Color.Red;</p><p><b>  break;</b>

56、</p><p>  case 3://土ª¨¢</p><p>  firstpos = new Point(0, 0);</p><p>  color = Color.Silver;</p><p><b>  break;</b></p><p>  case

57、 4://z</p><p>  firstpos = new Point(0, 0);</p><p>  color = Color.LawnGreen;</p><p><b>  break;</b></p><p>  case 5://倒Ì1z</p><p>  first

58、pos = new Point(0, 1);</p><p>  color = Color.DodgerBlue;</p><p><b>  break;</b></p><p>  case 6://L</p><p>  firstpos = new Point(0, 0);</p><p&g

59、t;  color = Color.Yellow;</p><p><b>  break;</b></p><p>  default://倒Ì1L</p><p>  firstpos = new Point(0, 0);</p><p>  color = Color.SaddleBrown;</p

60、><p><b>  break;</b></p><p><b>  }</b></p><p>  if (nextblock == null)</p><p>  nextblock = new Block(this.panel4, 3, 1, 20, this.nextShapeNo, firs

61、tpos, color);</p><p><b>  else</b></p><p><b>  {</b></p><p>  nextblock.GeneBlock(this.nextShapeNo, firstpos, color);</p><p>  nextblock.EraseLa

62、st();</p><p><b>  }</b></p><p><b>  }</b></p><p>  3.3.2 游戲控制設(shè)置設(shè)計(jì)編碼 </p><p>  操作設(shè)置界面的作用就是顯示本游戲操作鍵、開始級別設(shè)置和音效、是否運(yùn)行界面為透明的設(shè)置。下面是該界面所需的一些控件及控件實(shí)現(xiàn)所要求功

63、能的源代碼</p><p>  表3-1 主界面的控件設(shè)計(jì)</p><p>  public partial class Form2 : Form</p><p><b>  {</b></p><p>  private bool trans;</p><p>  private int lev

64、el;</p><p>  private Keys[] keys;</p><p>  public Form2()</p><p><b>  {</b></p><p>  InitializeComponent();</p><p>  this.keys = new Keys[5];&l

65、t;/p><p><b>  }</b></p><p>  private void ChangeKey(TextBox textbox, System.Windows.Forms.KeyEventArgs e, int i)</p><p><b>  {</b></p><p>  if ((e.

66、KeyValue >= 32 && e.KeyValue <= 40) || (e.KeyValue >= 45 && e.KeyValue <= 46) || (e.KeyValue >= 48 && e.KeyValue <= 57) || (e.KeyValue >= 65 && e.KeyValue <= 90) ||

67、 (e.KeyValue >= 96 && e.KeyValue <= 107) || (e.KeyValue >= 109 && e.KeyValue <= 111) || (e.KeyValue >= 186 && e.KeyValue <= 192) || (e.KeyValue >= 219 && e.KeyValue &l

68、t;= 222))</p><p><b>  {</b></p><p>  textbox.Text = e.KeyCode.ToString();</p><p>  this.keys[i] = e.KeyCode;</p><p><b>  }</b></p><p&

69、gt;<b>  }</b></p><p>  3.3.3 登陸界面設(shè)計(jì)編碼</p><p>  public partial class Form3 : Form</p><p><b>  {</b></p><p>  public int count=0 ;</p><

70、p>  public Form3()</p><p><b>  {</b></p><p>  InitializeComponent();</p><p><b>  }</b></p><p>  private void button1_Click(object sender, Eve

71、ntArgs e)</p><p><b>  {</b></p><p><b>  count++;</b></p><p>  if (count <= 3)</p><p><b>  {</b></p><p>  if (textBox

72、1.Text == "ldq" && textBox2.Text == "afafa")</p><p><b>  {</b></p><p>  Form1 aform = new Form1();</p><p>  aform.Show();</p><p>

73、;<b>  }</b></p><p><b>  else</b></p><p>  MessageBox.Show("用戶名或密碼錯誤", "警告!");</p><p><b>  }</b></p><p><b>

74、  else</b></p><p>  Application.Exit();</p><p><b>  }</b></p><p>  3.3.4 游戲方塊設(shè)計(jì)編碼</p><p>  public class Block</p><p><b>  {</b&g

75、t;</p><p>  private Control con;//繪圖控件</p><p>  private int leftBorder;//左邊界</p><p>  private int bottomBorder;//下邊界</p><p>  private int unitPix;//每塊像素?cái)?shù)</p><

76、;p>  private int shapeNo;//形狀號</p><p>  private int blockNum = 0;//塊數(shù)</p><p>  private int rowDelNum = 0;//消除行數(shù)</p><p>  private bool[,] huji;</p><p>  private Color

77、[,] iori;</p><p>  private Color color;//當(dāng)前塊的顏色</p><p>  private Point[] pos;//當(dāng)前位置</p><p>  private Point[] lastPos;//上一次位置</p><p>  public Block(Control con, int left

78、Border, int bottomBorder, int unitPix, int shapeNo, Point firstPos, Color color)</p><p><b>  {</b></p><p>  this.con = con;</p><p>  this.leftBorder = leftBorder;</p&

79、gt;<p>  this.bottomBorder = bottomBorder;</p><p>  this.unitPix = unitPix;</p><p>  this.SetPos(shapeNo, firstPos);//設(shè)置方塊位置</p><p>  this.color = color;</p><p>

80、  this.huji = new bool[leftBorder + 1, bottomBorder + 1];</p><p>  this.iori = new Color[leftBorder + 1, bottomBorder + 1];</p><p>  this.lastPos = new Point[4];</p><p><b>  }

81、</b></p><p>  public void EraseLast()</p><p><b>  {</b></p><p>  foreach (Point p in this.lastPos)</p><p><b>  {</b></p><p> 

82、 this.con.Invalidate(new Rectangle(p.X * unitPix, p.Y * unitPix, unitPix + 1, unitPix + 1));</p><p><b>  }</b></p><p><b>  }</b></p><p>  private void SetLas

83、tPos()</p><p><b>  {</b></p><p>  for (int i = 0; i < this.pos.Length; i++)</p><p><b>  {</b></p><p>  this.lastPos[i] = this.pos[i];</p&g

84、t;<p><b>  }</b></p><p><b>  }</b></p><p>  private void SetPos(int shapeNo, Point firstPos)//設(shè)置位置:形狀、第一個點(diǎn)的位置</p><p><b>  {</b></p>

85、<p>  this.shapeNo = shapeNo;</p><p>  this.pos = new Point[4];</p><p>  pos[0] = firstPos;//第一個序號為0,則為第一個方塊的位置</p><p>  switch (shapeNo)</p><p><b>  {</

86、b></p><p><b>  case 1:</b></p><p>  pos[1] = new Point(firstPos.X + 1, firstPos.Y);</p><p>  pos[2] = new Point(firstPos.X, firstPos.Y + 1);</p><p>  pos

87、[3] = new Point(firstPos.X + 1, firstPos.Y + 1);</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  pos[1] = new Point(firstPos.X + 1, firstPos.Y);</

88、p><p>  pos[2] = new Point(firstPos.X + 2, firstPos.Y);</p><p>  pos[3] = new Point(firstPos.X + 3, firstPos.Y);</p><p><b>  break;</b></p><p><b>  case

89、3:</b></p><p>  pos[1] = new Point(firstPos.X + 1, firstPos.Y);</p><p>  pos[2] = new Point(firstPos.X + 1, firstPos.Y + 1);</p><p>  pos[3] = new Point(firstPos.X + 2, firstP

90、os.Y);</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  pos[1] = new Point(firstPos.X + 1, firstPos.Y);</p><p>  pos[2] = new Point(first

91、Pos.X + 1, firstPos.Y + 1);</p><p>  pos[3] = new Point(firstPos.X + 2, firstPos.Y + 1);</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p> 

92、 pos[1] = new Point(firstPos.X + 1, firstPos.Y);</p><p>  pos[2] = new Point(firstPos.X + 1, firstPos.Y - 1);</p><p>  pos[3] = new Point(firstPos.X + 2, firstPos.Y - 1);</p><p><

93、;b>  break;</b></p><p><b>  case 6:</b></p><p>  pos[1] = new Point(firstPos.X, firstPos.Y + 1);</p><p>  pos[2] = new Point(firstPos.X + 1, firstPos.Y);</p&

94、gt;<p>  pos[3] = new Point(firstPos.X + 2, firstPos.Y);</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  pos[1] = new Point(firstPos.X + 1, f

95、irstPos.Y);</p><p>  pos[2] = new Point(firstPos.X + 2, firstPos.Y);</p><p>  pos[3] = new Point(firstPos.X + 2, firstPos.Y + 1);</p><p><b>  break;</b></p><p

96、><b>  }</b></p><p><b>  }</b></p><p>  private bool CanMove(int direction)</p><p><b>  {</b></p><p>  bool canMove = true;</p&

97、gt;<p>  if (direction == 0)</p><p><b>  {</b></p><p>  foreach (Point p in this.pos)</p><p><b>  {</b></p><p>  if (p.X - 1 < 0 || th

98、is.huji[p.X - 1, p.Y])</p><p><b>  {</b></p><p>  canMove = false;</p><p><b>  break;</b></p><p><b>  }</b></p><p><

99、b>  }</b></p><p><b>  }</b></p><p>  else if (direction == 1)</p><p><b>  {</b></p><p>  foreach (Point p in this.pos)</p><p

100、><b>  {</b></p><p>  if (p.X + 1 > this.leftBorder || this.huji[p.X + 1, p.Y])</p><p><b>  {</b></p><p>  canMove = false;</p><p><b>

101、;  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b

102、>  {</b></p><p>  foreach (Point p in this.pos)</p><p><b>  {</b></p><p>  if (p.Y + 1 > this.bottomBorder || this.huji[p.X, p.Y + 1])</p><p>&l

103、t;b>  {</b></p><p>  canMove = false;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b&

104、gt;  }</b></p><p>  return canMove;</p><p><b>  }</b></p><p>  private bool CanRotate(Point[] pos)</p><p><b>  {</b></p><p> 

105、 bool canRotate = true;</p><p>  foreach (Point p in pos)</p><p><b>  {</b></p><p>  if (p.X < 0 || p.X > this.leftBorder || p.Y<0||p.Y>this.bottomBorder||th

106、is.huji[p.X,p.Y])</p><p><b>  {</b></p><p>  canRotate = false;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b&g

107、t;  }</b></p><p>  if (canRotate == true)</p><p>  this.SetLastPos();</p><p>  return canRotate;</p><p><b>  }</b></p><p>  private void

108、DelRows()</p><p><b>  {</b></p><p>  int count = 0;</p><p>  int highRow = 20;</p><p>  int lowRow = -1;</p><p>  int[] delRow = { -1, -1, -1,

109、-1 };</p><p>  foreach (Point p in this.pos)</p><p><b>  {</b></p><p>  if (p.Y == highRow || p.Y == lowRow)</p><p><b>  continue;</b></p>

110、<p><b>  int i;</b></p><p>  for (i = 0; i < this.huji.GetLength(0); i++)</p><p>  if (huji[i, p.Y] == false)</p><p><b>  break;</b></p><

111、;p>  if (i == this.huji.GetLength(0))</p><p><b>  {</b></p><p>  delRow[count] = p.Y;</p><p>  if (p.Y < highRow)</p><p>  highRow = p.Y;</p>&

112、lt;p>  if (p.Y > lowRow)</p><p>  lowRow = p.Y;</p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

113、gt;  if (count > 0)</p><p><b>  {</b></p><p>  //------------------------------------------------------</p><p>  Graphics gra = con.CreateGraphics();</p><p

114、>  foreach (Point p in this.lastPos)</p><p><b>  {</b></p><p>  gra.FillRectangle(new SolidBrush(con.BackColor), p.X * this.unitPix, p.Y * unitPix, 25, 25);</p><p>&l

115、t;b>  }</b></p><p>  foreach (Point p in this.pos)</p><p><b>  {</b></p><p>  this.DrawOne(p.X,p.Y,this.color,gra);</p><p><b>  }</b>&l

116、t;/p><p>  foreach(int i in delRow)</p><p><b>  {</b></p><p><b>  if(i>0)</b></p><p><b>  {</b></p><p>  for(int j =0;j

117、<this.huji.GetLength(0);j++)</p><p><b>  {</b></p><p>  gra.FillRectangle(new SolidBrush(Color.FromArgb(60, Color.Black)), j * this.unitPix, i * unitPix, 25, 25);</p><p

118、><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  System.Threading.Thread.CurrentThread.Join(180);</p><p>  //------------

119、-----------------------------------------------</p><p>  if (count == 2 && lowRow - highRow > 1)</p><p><b>  {</b></p><p>  for (int i = lowRow; i > highRo

120、w + 1; i--)</p><p><b>  {</b></p><p>  for (int j = 0; j < this.huji.GetLength(0); j++)</p><p><b>  {</b></p><p>  this.huji[j, i] = this.huj

121、i[j, i - 1];</p><p>  this.iori[j, i] = this.iori[j, i - 1];</p><p><b>  }</b></p><p><b>  }</b></p><p>  for(int i=highRow;i>=count;i--)<

122、/p><p><b>  {</b></p><p>  for(int j=0;j<this.huji.GetLength(0);j++)</p><p><b>  {</b></p><p>  this.huji[j,i+1]=this.huji[j,i-1];</p>&l

123、t;p>  this.iori[j,i+1]=this.iori[j,i-1]; }</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><

124、;p>  else if(count==3 && lowRow-highRow>2)</p><p><b>  {</b></p><p>  int midRow=-1;</p><p>  foreach(int row in delRow)</p><p><b>  {&l

125、t;/b></p><p>  if(row != highRow && row != lowRow)</p><p><b>  {</b></p><p>  midRow=row;</p><p><b>  break;</b></p><p>

126、<b>  }</b></p><p><b>  }</b></p><p>  for(int j=0;j<this.huji.GetLength(0);j++)</p><p><b>  {</b></p><p>  this.huji[j,lowRow]=th

127、is.huji[j,lowRow+highRow-midRow];</p><p><b>  }</b></p><p>  for(int i=highRow;i>=count;i--)</p><p><b>  {</b></p><p>  for(int j=0;j<this

128、.huji.GetLength(0);j++)</p><p><b>  {</b></p><p>  this.huji[j,i+2]=this.huji[j,i-1];</p><p>  this.iori[j,i+2]=this.iori[j,i-1];</p><p><b>  }</b&

129、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  for(int i=lowRow;i&

130、gt;=count;i--)</p><p><b>  {</b></p><p>  for(int j=0;j<this.huji.GetLength(0);j++)</p><p><b>  {</b></p><p>  this.huji[j,i]=this.huji[j,i-c

131、ount];</p><p>  this.iori[j,i]=this.iori[j,i-count];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for

132、(int i=0;i<count;i++)</p><p><b>  {</b></p><p>  for(int j=0;j<this.huji.GetLength(0);j++)</p><p><b>  {</b></p><p>  this.huji[j,i]=false

133、;</p><p><b>  }</b></p><p>  //Helpers1.PlaySound();</p><p><b>  }</b></p><p>  con.Invalidate(new Rectangle(0,0,con.Width,( lowRow+1) * this.un

134、itPix));</p><p>  this.rowDelNum += count;</p><p>  /* Cnum = count;*/</p><p><b>  }</b></p><p>  public void FixBlock()</p><p><b>  {<

135、;/b></p><p>  this.blockNum++;</p><p>  foreach (Point p in this.pos)</p><p><b>  {</b></p><p>  this.huji[p.X, p.Y] = true;</p><p>  this.i

136、ori[p.X, p.Y] = this.color;</p><p><b>  }</b></p><p>  this.DelRows();</p><p><b>  }</b></p><p>  public bool GeneBlock(int shapeNo, Point first

137、Pos, Color color)</p><p><b>  {</b></p><p>  this.SetLastPos();</p><p>  this.EraseLast();</p><p>  this.SetPos(shapeNo, firstPos);</p><p>  if

138、 (!this.CanRotate(this.pos))</p><p><b>  {</b></p><p>  this.pos = null;</p><p>  return false;</p><p><b>  }</b></p><p><b> 

139、 else</b></p><p><b>  {</b></p><p>  this.color = color;</p><p>  return true;</p><p><b>  }</b></p><p><b>  }</b>

溫馨提示

  • 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

提交評論