1、 public Block()/构造函数 Random randomGenerator = new Random(); int randomBlock = randomGenerator.Next(1, 5);/产生14的数 this.ID = randomBlock; switch (this.ID) case 1: /横条形 this.Width = 4; this.Height = 1; this.Top = 0; this.Left = 3; shape = new intthis.Width, this.Height; shape0, 0 = 1; shape1, 0 = 1; sh
2、ape2, 0 = 1; shape3, 0 = 1; break; case 2: /正方形 this.Width = 2; this.Height = 2; this.Left = 4; / Creates the new shape for this block. shape0, 1 = 1;shape1, 1 = 1; case 3: /形 this.Width = 3; this.Height = 3; shape1, 1 = 1; shape1, 2 = 1; case 4: /L形 shape0, 2 = 1; public short Width/Width属性 get ret
3、urn width; set width = value; public short Height/Height属性 return height; height = value; public short Top/Top属性 return top; top = value; public short Left/Left属性 return left; left = value; public void Draw(Graphics g) Image brickImage = Image.FromFile(image/block0.gif); for (int i = 0; i this.Width
4、; i+) for (int j = 0; j PlayingFieldHeight) hit = true;/当前块触游戏面板底 else/检查是否接触到下一行其他已落方块 if (currentBlock.shapei, j = 1) & (pilefx, fy = 1)/(fy + 1) if (hit)/触到其他已落方块或游戏面板底 currentBlock.Top-; MoveBlockToPile();/固定到游戏面板上 /产生新的俄罗斯方块 return hit; public void RotateCurrentBlock()/旋转方块 bool canRotate = tru
5、e; short newWidth = 0; short newHeight = 0; int, newShape; newWidth = currentBlock.Height; newHeight = currentBlock.Width; newShape = new intnewWidth, newHeight; int x,y; if (currentBlock.Left + newWidth) = Game.PlayingFieldWidth) & (currentBlock.Top + newHeight) 0) fy = (currentBlock.Top + 1) + j;
6、(pile(fx - 1), fy =1) canMove = false; if (canMove) currentBlock.Left-; else/右移动 if (currentBlock.Left + currentBlock.Width) 0; j-)/j = PlayingFieldHeight bool fullLine = true; PlayingFieldWidth; if (pilei, j = 0) fullLine = false; if (fullLine) numLines+; completeLinesnumLines = j; if (numLines for
7、 (int i = 1;= numLines; ClearLine(completeLinesi + (i - 1); score += 5 * (numLines * (numLines + 1); lines += numLines; return numLines; private void ClearLine(int lineNumber) for (int j = lineNumber; j-) pilei, j = pilei, (j - 1); pilei, 0 = 0; public bool CheckForGameOver()/检查游戏是否结束 if (currentBlo
8、ck.Top = 0) return true; else return false;设计窗体类(form1.cs)下图:如果觉得图片不清楚可以另存为桌面,慢慢研究using System.ComponentModel;using System.Data;using System.Windows.Forms; public partial class Form1 : Form public Form1() InitializeComponent(); Game game=null; private void button1_Click(object sender, EventArgs e) g
9、ame= new Game(); pictureBox1.Height = Game.BlockImageHeight * Game.PlayingFieldHeight + 3; pictureBox1.Width = Game.BlockImageWidth * Game.PlayingFieldWidth+3; pictureBox1.Invalidate();/重画游戏面板区域 timer1.Enabled = true; button1.Enabled = false; private void button2_Click(object sender, EventArgs e) if
10、 (button2.Text = 暂停游戏) timer1.Enabled = false; button2.Text = 继续游戏; private void button3_Click(object sender, EventArgs e) this.Close(); private void pictureBox1_Paint(object sender, PaintEventArgs e) /重画游戏面板 if (game ! game.DrawPile(e.Graphics); game.DrawCurrentBlock(e.Graphics); private void pictu
11、reBox2_Paint(object sender, PaintEventArgs e) /重画下一个方块= null) game.DrawNextBlock(e.Graphics); private void timer1_Tick(object sender, EventArgs e) if (!game.DownCurrentBlock() pictureBox2.Invalidate();/重画下一个方块 lblScore.Text = game.score.ToString(); if (game.over = true) MessageBox.Show(游戏结束, 提示 button1.Enabled = true; protected override bool ProcessCmdKey(ref Message msg, Keys e) /重写ProcessCmdKey方法 if (button2.Tex
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1