刚学C#,想用它做个俄罗斯方块,大家给点意见. 试着用directx来画方块,三维,有动画效果的如果只是单纯的几张图片组合来做的话,那还是做些别的实际点的好了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你把你的email留下来,我有,我给你发一个 大家谁有五子棋的源程序啊??要有AI的啊主要是AI 不要太弱智哦!! 我也要:[email protected]先说声谢谢了 正在写一份用C#做俄罗斯的教程打算在网上公布.先发给楼主瞧瞧了.你的e-mail留一个.另外下面的源代码(转录的),要运行的话在dos下面输入csc 文件名.cs即可了.using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;namespace MyRussianRock{ /// /// Form1 的摘要说明。 /// public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Timer timer1; private System.ComponentModel.IContainer components; private int[,] table=new int[15,15]; private int x,y;//方块的坐标 // private int[] shape=new int[9]{1,2,3,4,5,6,7,8,9};//nine type of block private int currentshape;//当前的形状 public void block (int i)//i 为方块的形状 { x=150;//初始的坐标 y=10; switch(i) { case 1:currentshape=1;//田字形 paintBlock(1,Color.Yellow); break; case 2:currentshape=2;//T字形 paintBlock(2,Color.Yellow); break; case 3:currentshape=3;//长条形 paintBlock(3,Color.Yellow); break; case 4:currentshape=4;//Z字形 paintBlock(4,Color.Yellow); break; } } private void rotate()//旋转方法 { Graphics g=this.CreateGraphics(); int a,b;//获得在table中的坐标 a=(y-10)/20; b=(x-10)/20; switch(currentshape) { case 1:break; case 2: if(a>=1&&a<=12&&b<=11&&table[a-1,b+1]==0&&table[a+1,b+2]==0&&table[a+1,b]==0&&table[a-1,b]==0) { paintBlock(2,Color.Black); paintBlock(5,Color.Yellow); } break; case 3: if(a<=10&&table[a+1,b]==0&&table[a+2,b]==0&&table[a+3,b]==0) { paintBlock(3,Color.Black); paintBlock(8,Color.Yellow); } break; case 4: if(a<=10&&b>=1&&table[a+1,b]==0&&table[a+1,b-1]==0&&table[a+2,b-1]==0) { paintBlock(4,Color.Black); paintBlock(9,Color.Yellow); } break; case 5: if(a<=12&&b>=1&&table[a+1,b]==0&&table[a+1,b-1]==0) { paintBlock(5,Color.Black); paintBlock(6,Color.Yellow); } break; case 6: if(a<=11&&table[a+2,b]==0) { paintBlock(6,Color.Black); paintBlock(7,Color.Yellow); } break; case 7: if(b<=12&&table[a,b+1]==0&&table[a,b+2]==0) { paintBlock(7,Color.Black); paintBlock(2,Color.Yellow); } break; case 8: if(b<=10&&table[a,b+1]==0&&table[a,b+2]==0&&table[a,b+3]==0) { paintBlock(8,Color.Black); paintBlock(3,Color.Yellow); } break; case 9: if(a<=12&&b<=11&&table[a+1,b+1]==0&&table[a+1,b+2]==0) { paintBlock(9,Color.Black); paintBlock(4,Color.Yellow); } break; } } private int getRandomBlock()//得到随机的形状 { Random rd=new Random(); return rd.Next(1,4);// } public Form1() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); //this.KeyPress+=new KeyPressEventHandler(Form1_KeyPress); this.KeyDown+=new KeyEventHandler(Form1_KeyDown); inite(); block(getRandomBlock()); this.timer1.Start(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /// /// 清理所有正在使用的资源。 /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows 窗体设计器生成的代码 /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.timer1 = new System.Windows.Forms.Timer(this.components); // // timer1 // this.timer1.Enabled = true; this.timer1.Interval = 500; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(320, 317); this.Enabled = false; this.Name = "Form1"; this.Text = "Form1"; } #endregion /// /// 应用程序的主入口点。 /// [STAThread] static void Main() { Application.Run(new Form1()); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint (e); Graphics g=e.Graphics; g.FillRectangle(new SolidBrush(Color.Blue),10,10,300,300); g.FillRectangle(new SolidBrush(Color.Black),30,10,260,280); for(int i=0;i<14;i++) for(int j=1;j<14;j++) { if(table[i,j]==1) g.FillRectangle(new SolidBrush(Color.Yellow),j*20+10,i*20+10,20,20); } } private void paintBlock(int z,Color w)//画方块的函数 { // if(x>13||x<0||y<1||y>13) return; Graphics g=this.CreateGraphics(); int a,b;//in table int c; Color d; if(w==Color.Black) { c=0; d=Color.Black; } else { c=1; d=Color.Green; } Pen drawPen=new Pen(d,2); SolidBrush sBrush=new SolidBrush(w); switch(z) { case 1: if(x>=30&&x<=250&&y>=10&&y<=250) { a=(y-10)/20; b=(x-10)/20; g.FillRectangle(sBrush,x,y,40,40); g.DrawRectangle(drawPen,x,y,40,20); g.DrawRectangle(drawPen,x,y+20,40,20); g.DrawRectangle(drawPen,x+20,y,20,40); table[a,b]=c; table[a+1,b]=c; table[a,b+1]=c; table[a+1,b+1]=c; currentshape=1; } break; case 2: if(x>=30&&x<=230&&y>=10&&y<=250) { g.FillRectangle(sBrush,x,y,60,20); g.FillRectangle(sBrush,x+20,y+20,20,20); g.DrawRectangle(drawPen,x,y,60,20); g.DrawRectangle(drawPen,x+20,y,20,40); a=(y-10)/20; b=(x-10)/20; table[a,b]=c; table[a,b+1]=c; table[a,b+2]=c; table[a+1,b+1]=c; currentshape=2; } break; case 3:if(x>=30&&x<=210&&y>=10&&y<=270) { g.FillRectangle(sBrush,x,y,80,20); g.DrawRectangle(drawPen,x,y,80,20); g.DrawRectangle(drawPen,x+20,y,20,20); g.DrawRectangle(drawPen,x+40,y,20,20); a=(y-10)/20; b=(x-10)/20; table[a,b]=c; table[a,b+1]=c; table[a,b+2]=c; table[a,b+3]=c; currentshape=3; } break; case 4:if(x>=30&&x<=230&&y>=10&&y<=250) { g.FillRectangle(sBrush,x,y,40,20); g.FillRectangle(sBrush,x+20,y+20,40,20); g.DrawRectangle(drawPen,x,y,40,20); g.DrawRectangle(drawPen,x+20,y+20,40,20); g.DrawRectangle(drawPen,x+20,y,20,40); a=(y-10)/20; b=(x-10)/20; table[a,b]=c; table[a,b+1]=c; table[a+1,b+1]=c; table[a+1,b+2]=c; currentshape=4; } break; case 5:if(x>=30&&x<=250&&y>=30&&y<=250) { g.FillRectangle(sBrush,x,y,20,20); g.FillRectangle(sBrush,x+20,y-20,20,60); g.DrawRectangle(drawPen,x,y,40,20); g.DrawRectangle(drawPen,x+20,y-20,20,60); a=(y-10)/20; b=(x-10)/20; table[a,b]=c; table[a-1,b+1]=c; table[a,b+1]=c; table[a+1,b+1]=c; currentshape=5; } break; case 6:if(x>=50&&x<=250&&y>=10&&y<=250) { g.FillRectangle(sBrush,x,y,20,20); g.FillRectangle(sBrush,x-20,y+20,60,20); g.DrawRectangle(drawPen,x,y,20,40); g.DrawRectangle(drawPen,x-20,y+20,60,20); a=(y-10)/20; b=(x-10)/20; table[a,b]=c; table[a+1,b-1]=c; table[a+1,b]=c; table[a+1,b+1]=c; currentshape=6; } break; case 7:if(x>=30&&x<=250&&y>=10&&y<=230) { g.FillRectangle(sBrush,x,y,20,60); g.FillRectangle(sBrush,x+20,y+20,20,20); g.DrawRectangle(drawPen,x,y,20,60); g.DrawRectangle(drawPen,x,y+20,40,20); a=(y-10)/20; b=(x-10)/20; table[a,b]=c; table[a+1,b]=c; table[a+2,b]=c; table[a+1,b+1]=c; currentshape=7; } break; case 8:if(x>=30&&x<=270&&y>=10&&y<=210) { g.FillRectangle(sBrush,x,y,20,80); g.DrawRectangle(drawPen,x,y,20,80); g.DrawRectangle(drawPen,x,y+20,20,20); g.DrawRectangle(drawPen,x,y+40,20,20); a=(y-10)/20; b=(x-10)/20; table[a,b]=c; table[a+1,b]=c; table[a+2,b]=c; table[a+3,b]=c; currentshape=8; } break; case 9:if(x>=30&&x<=270&&y>=30&&y<=250) { g.FillRectangle(sBrush,x,y,20,40); g.FillRectangle(sBrush,x+20,y-20,20,40); g.DrawRectangle(drawPen,x,y,20,40); g.DrawRectangle(drawPen,x+20,y-20,20,40); g.DrawRectangle(drawPen,x,y,40,20); a=(y-10)/20; b=(x-10)/20; table[a,b]=c; table[a,b+1]=c; table[a+1,b]=c; table[a-1,b+1]=c; currentshape=9; } break; } g.Dispose(); } private void dropDown()//下落方法 { Graphics g=this.CreateGraphics(); switch(currentshape) { case 1: if(x>=30&&x<=250&&y>=10&&y<=230) { paintBlock(1,Color.Black); y+=20; paintBlock(1,Color.Yellow); } break; case 2: if(x>=30&&x<=230&&y>=10&&y<=230) { paintBlock(2,Color.Black); y+=20; paintBlock(2,Color.Yellow); } break; case 3: if(x>=30&&x<=210&&y>=10&&y<=250) { paintBlock(3,Color.Black); y+=20; paintBlock(3,Color.Yellow); } break; case 4: if(x>=30&&x<=210&&y>=10&&y<=230) { paintBlock(4,Color.Black); y+=20; paintBlock(4,Color.Yellow); } break; case 5:if(x>=30&&x<=250&&y>=30&&y<=230) { paintBlock(5,Color.Black); y+=20; paintBlock(5,Color.Yellow); } break; case 6:if(x>=50&&x<=250&&y>=10&&y<=230) { paintBlock(6,Color.Black); y+=20; paintBlock(6,Color.Yellow); } break; case 7:if(x>=30&&x<=250&&y>=10&&y<=210) { paintBlock(7,Color.Black); y+=20; paintBlock(7,Color.Yellow); } break; case 8:if(x>=30&&x<=270&&y>=10&&y<=190) { paintBlock(8,Color.Black); y+=20; paintBlock(8,Color.Yellow); } break; case 9:if(x>=30&&x<=250&&y>=30&&y<=230) { paintBlock(9,Color.Black); y+=20; paintBlock(9,Color.Yellow); } break; } } private void inite()//初始化 { for(int i=0;i<15;i++) for(int j=0;j<15;j++) { table[i,j]=1; } for(int i=0;i<14;i++) for(int j=1;j<14;j++) { table[i,j]=0; } } private void timer1_Tick(object sender, System.EventArgs e) { if (testCanDrop()) dropDown(); else { disappear(); block(getRandomBlock()); if(testCanDrop()==false) { timer1.Stop(); MessageBox.Show("Cow boy, Game over!try again!"); inite(); Graphics g=CreateGraphics(); g.FillRectangle(new SolidBrush(Color.Blue),10,10,300,300); g.FillRectangle(new SolidBrush(Color.Black),30,10,260,280); block(getRandomBlock()); timer1.Start(); } } } private void disappear()//消行 { int n; Graphics g=this.CreateGraphics(); int i=13; while(i>=0) { n=0; for(int j=1;j<14;j++) { if(table[i,j]==1) n++; else break; } if(n==13) { for(int k=i;k>0;k--) for(int w=1;w<14;w++) { if(table[k-1,w]==1) { g.FillRectangle(new SolidBrush(Color.Yellow),w*20+10,k*20+10,20,20); g.DrawRectangle(new Pen(Color.Green,2),w*20+10,k*20+10,20,20); } else g.FillRectangle(new SolidBrush(Color.Black),w*20+10,k*20+10,20,20); table[k,w]=table[k-1,w]; } } else i--; } } private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) ////////////////move { int a,b; if((int)e.KeyCode==37) { switch(currentshape) { case 1: if(x>=50&&x<=250&&y>=10&&y<=250) { a=(y-10)/20; b=(x-10)/20; if(table[a,b-1]==0&&table[a+1,b-1]==0) { paintBlock(1,Color.Black); x-=20; paintBlock(1,Color.Yellow); } } break; case 2: if(x>=50&&x<=230&&y>=10&&y<=250) { a=(y-10)/20; b=(x-10)/20; if(table[a,b-1]==0&&table[a+1,b]==0) { paintBlock(2,Color.Black); x-=20; paintBlock(2,Color.Yellow); } } break; case 3: if(x>=50&&x<=210&&y>=10&&y<=270) { a=(y-10)/20; b=(x-10)/20; if(table[a,b-1]==0) { paintBlock(3,Color.Black); x-=20; paintBlock(3,Color.Yellow); } } break; case 4: if(x>=50&&x<=230&&y>=10&&y<=250) { a=(y-10)/20; b=(x-10)/20; if(table[a,b-1]==0&&table[a+1,b]==0) { paintBlock(4,Color.Black); x-=20; paintBlock(4,Color.Yellow); } } break; case 5: if(x>=50&&x<=250&&y>=10&&y<=250) { a=(y-10)/20; b=(x-10)/20; if(table[a,b-1]==0&&table[a-1,b]==0&&table[a+1,b]==0) { paintBlock(5,Color.Black); x-=20; paintBlock(5,Color.Yellow); } } break; case 6: if(x>=70&&x<=250&&y>=10&&y<=250) { a=(y-10)/20; b=(x-10)/20; if(table[a+1,b-2]==0&&table[a,b-1]==0) { paintBlock(6,Color.Black); x-=20; paintBlock(6,Color.Yellow); } } break; case 7: if(x>=50&&x<=250&&y>=10&&y<=230) { a=(y-10)/20; b=(x-10)/20; if(table[a,b-1]==0&&table[a+1,b-1]==0&&table[a+2,b-1]==0) { paintBlock(7,Color.Black); x-=20; paintBlock(7,Color.Yellow); } } break; case 8: if(x>=50&&x<=270&&y>=10&&y<=210) { a=(y-10)/20; b=(x-10)/20; if(table[a,b-1]==0&&table[a+1,b-1]==0&&table[a+2,b-1]==0&&table[a+3,b-1]==0) { paintBlock(8,Color.Black); x-=20; paintBlock(8,Color.Yellow); } } break; case 9: if(x>=50&&x<=250&&y>=10&&y<=230) { a=(y-10)/20; b=(x-10)/20; if(table[a,b-1]==0&&table[a+1,b-1]==0&&table[a-1,b]==0) { paintBlock(9,Color.Black); x-=20; paintBlock(9,Color.Yellow); } } break; } } if((int)e.KeyCode==39) { switch(currentshape) { case 1:if(x>=30&&x<=230&&y>=10&&y<=250) { a=(y-10)/20; b=(x-10)/20; if(table[a+2,b]==0&&table[a+2,b+1]==0) { paintBlock(1,Color.Black); x+=20; paintBlock(1,Color.Yellow); } } break; case 2:if(x>=30&&x<=210&&y>=10&&y<=250) { a=(y-10)/20; b=(x-10)/20; if(table[a,b+3]==0&&table[a+1,b+2]==0) { paintBlock(2,Color.Black); x+=20; paintBlock(2,Color.Yellow); } } break; case 3:if(x>=30&&x<=190&&y>=10&&y<=270) { a=(y-10)/20; b=(x-10)/20; if(table[a,b+4]==0) { paintBlock(3,Color.Black); x+=20; paintBlock(3,Color.Yellow); } } break; 谢了.我的E-mail:[email protected]不过楼上的好像没有写完吧 我的伊妹儿[email protected]给我发一个! datagridview绑定数据源后插入行 问个线程生命周期的问题 如何去掉背景色呢 foreach 循环的奇怪问题 如何下载图片 在C#中怎么样给数组动态分配空间 treeview控件怎么通过代码和数据库绑定 刚学C#,可以看《C#高级编程》吗? 水晶报表怎样从DataSet中动态读取DataSet中检索出来的数据?请教。。。。 WPF中动态加载的自定义按钮,点击触发时更改其标题如何实现 在C#中怎么给Word中的域赋值,在线等结贴。 200分 寻求一种最为科学的更新数据的方法:请各位高人,给小弟指点指点。 谢谢。
要有AI的啊
主要是AI 不要太弱智哦!!
[email protected]
先说声谢谢了
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace MyRussianRock
{
///
/// Form1 的摘要说明。
///
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Timer timer1;
private System.ComponentModel.IContainer components;
private int[,] table=new int[15,15];
private int x,y;//方块的坐标
// private int[] shape=new int[9]{1,2,3,4,5,6,7,8,9};//nine type of block
private int currentshape;//当前的形状
public void block (int i)//i 为方块的形状
{
x=150;//初始的坐标
y=10;
switch(i)
{
case 1:currentshape=1;//田字形
paintBlock(1,Color.Yellow);
break;
case 2:currentshape=2;//T字形
paintBlock(2,Color.Yellow);
break;
case 3:currentshape=3;//长条形
paintBlock(3,Color.Yellow);
break;
case 4:currentshape=4;//Z字形
paintBlock(4,Color.Yellow);
break;
}
}
private void rotate()//旋转方法
{
Graphics g=this.CreateGraphics();
int a,b;//获得在table中的坐标
a=(y-10)/20;
b=(x-10)/20;
switch(currentshape)
{
case 1:break;
case 2:
if(a>=1&&a<=12&&b<=11&&table[a-1,b+1]==0&&table[a+1,b+2]==0&&table[a+1,b]==0&&table[a-1,b]==0)
{
paintBlock(2,Color.Black);
paintBlock(5,Color.Yellow);
}
break;
case 3:
if(a<=10&&table[a+1,b]==0&&table[a+2,b]==0&&table[a+3,b]==0)
{
paintBlock(3,Color.Black);
paintBlock(8,Color.Yellow);
}
break;
case 4:
if(a<=10&&b>=1&&table[a+1,b]==0&&table[a+1,b-1]==0&&table[a+2,b-1]==0)
{
paintBlock(4,Color.Black);
paintBlock(9,Color.Yellow);
}
break;
case 5:
if(a<=12&&b>=1&&table[a+1,b]==0&&table[a+1,b-1]==0)
{
paintBlock(5,Color.Black);
paintBlock(6,Color.Yellow);
}
break;
case 6:
if(a<=11&&table[a+2,b]==0)
{
paintBlock(6,Color.Black);
paintBlock(7,Color.Yellow);
}
break;
case 7:
if(b<=12&&table[a,b+1]==0&&table[a,b+2]==0)
{
paintBlock(7,Color.Black);
paintBlock(2,Color.Yellow);
}
break;
case 8:
if(b<=10&&table[a,b+1]==0&&table[a,b+2]==0&&table[a,b+3]==0)
{
paintBlock(8,Color.Black);
paintBlock(3,Color.Yellow);
}
break;
case 9:
if(a<=12&&b<=11&&table[a+1,b+1]==0&&table[a+1,b+2]==0)
{
paintBlock(9,Color.Black);
paintBlock(4,Color.Yellow);
}
break;
}
}
private int getRandomBlock()//得到随机的形状
{
Random rd=new Random();
return rd.Next(1,4);//
}
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//this.KeyPress+=new KeyPressEventHandler(Form1_KeyPress);
this.KeyDown+=new KeyEventHandler(Form1_KeyDown);
inite();
block(getRandomBlock());
this.timer1.Start();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
} ///
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows 窗体设计器生成的代码
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.timer1 = new System.Windows.Forms.Timer(this.components);
//
// timer1
//
this.timer1.Enabled = true;
this.timer1.Interval = 500;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(320, 317);
this.Enabled = false;
this.Name = "Form1";
this.Text = "Form1";
}
#endregion ///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
{
base.OnPaint (e);
Graphics g=e.Graphics;
g.FillRectangle(new SolidBrush(Color.Blue),10,10,300,300);
g.FillRectangle(new SolidBrush(Color.Black),30,10,260,280);
for(int i=0;i<14;i++)
for(int j=1;j<14;j++)
{
if(table[i,j]==1)
g.FillRectangle(new SolidBrush(Color.Yellow),j*20+10,i*20+10,20,20);
}
}
private void paintBlock(int z,Color w)//画方块的函数
{
// if(x>13||x<0||y<1||y>13) return;
Graphics g=this.CreateGraphics();
int a,b;//in table
int c;
Color d;
if(w==Color.Black)
{
c=0;
d=Color.Black;
}
else
{
c=1;
d=Color.Green;
}
Pen drawPen=new Pen(d,2);
SolidBrush sBrush=new SolidBrush(w);
switch(z)
{
case 1: if(x>=30&&x<=250&&y>=10&&y<=250)
{
a=(y-10)/20;
b=(x-10)/20;
g.FillRectangle(sBrush,x,y,40,40);
g.DrawRectangle(drawPen,x,y,40,20);
g.DrawRectangle(drawPen,x,y+20,40,20);
g.DrawRectangle(drawPen,x+20,y,20,40);
table[a,b]=c;
table[a+1,b]=c;
table[a,b+1]=c;
table[a+1,b+1]=c;
currentshape=1;
}
break;
case 2: if(x>=30&&x<=230&&y>=10&&y<=250)
{
g.FillRectangle(sBrush,x,y,60,20);
g.FillRectangle(sBrush,x+20,y+20,20,20);
g.DrawRectangle(drawPen,x,y,60,20);
g.DrawRectangle(drawPen,x+20,y,20,40);
a=(y-10)/20;
b=(x-10)/20;
table[a,b]=c;
table[a,b+1]=c;
table[a,b+2]=c;
table[a+1,b+1]=c;
currentshape=2;
}
break;
case 3:if(x>=30&&x<=210&&y>=10&&y<=270)
{
g.FillRectangle(sBrush,x,y,80,20);
g.DrawRectangle(drawPen,x,y,80,20);
g.DrawRectangle(drawPen,x+20,y,20,20);
g.DrawRectangle(drawPen,x+40,y,20,20);
a=(y-10)/20;
b=(x-10)/20;
table[a,b]=c;
table[a,b+1]=c;
table[a,b+2]=c;
table[a,b+3]=c;
currentshape=3;
}
break;
case 4:if(x>=30&&x<=230&&y>=10&&y<=250)
{
g.FillRectangle(sBrush,x,y,40,20);
g.FillRectangle(sBrush,x+20,y+20,40,20);
g.DrawRectangle(drawPen,x,y,40,20);
g.DrawRectangle(drawPen,x+20,y+20,40,20);
g.DrawRectangle(drawPen,x+20,y,20,40);
a=(y-10)/20;
b=(x-10)/20;
table[a,b]=c;
table[a,b+1]=c;
table[a+1,b+1]=c;
table[a+1,b+2]=c;
currentshape=4;
}
break;
case 5:if(x>=30&&x<=250&&y>=30&&y<=250)
{
g.FillRectangle(sBrush,x,y,20,20);
g.FillRectangle(sBrush,x+20,y-20,20,60);
g.DrawRectangle(drawPen,x,y,40,20);
g.DrawRectangle(drawPen,x+20,y-20,20,60);
a=(y-10)/20;
b=(x-10)/20;
table[a,b]=c;
table[a-1,b+1]=c;
table[a,b+1]=c;
table[a+1,b+1]=c;
currentshape=5;
}
break;
case 6:if(x>=50&&x<=250&&y>=10&&y<=250)
{
g.FillRectangle(sBrush,x,y,20,20);
g.FillRectangle(sBrush,x-20,y+20,60,20);
g.DrawRectangle(drawPen,x,y,20,40);
g.DrawRectangle(drawPen,x-20,y+20,60,20);
a=(y-10)/20;
b=(x-10)/20;
table[a,b]=c;
table[a+1,b-1]=c;
table[a+1,b]=c;
table[a+1,b+1]=c;
currentshape=6;
}
break;
case 7:if(x>=30&&x<=250&&y>=10&&y<=230)
{
g.FillRectangle(sBrush,x,y,20,60);
g.FillRectangle(sBrush,x+20,y+20,20,20);
g.DrawRectangle(drawPen,x,y,20,60);
g.DrawRectangle(drawPen,x,y+20,40,20);
a=(y-10)/20;
b=(x-10)/20;
table[a,b]=c;
table[a+1,b]=c;
table[a+2,b]=c;
table[a+1,b+1]=c;
currentshape=7;
}
break;
case 8:if(x>=30&&x<=270&&y>=10&&y<=210)
{
g.FillRectangle(sBrush,x,y,20,80);
g.DrawRectangle(drawPen,x,y,20,80);
g.DrawRectangle(drawPen,x,y+20,20,20);
g.DrawRectangle(drawPen,x,y+40,20,20);
a=(y-10)/20;
b=(x-10)/20;
table[a,b]=c;
table[a+1,b]=c;
table[a+2,b]=c;
table[a+3,b]=c;
currentshape=8;
}
break;
case 9:if(x>=30&&x<=270&&y>=30&&y<=250)
{
g.FillRectangle(sBrush,x,y,20,40);
g.FillRectangle(sBrush,x+20,y-20,20,40);
g.DrawRectangle(drawPen,x,y,20,40);
g.DrawRectangle(drawPen,x+20,y-20,20,40);
g.DrawRectangle(drawPen,x,y,40,20);
a=(y-10)/20;
b=(x-10)/20;
table[a,b]=c;
table[a,b+1]=c;
table[a+1,b]=c;
table[a-1,b+1]=c;
currentshape=9;
}
break;
}
g.Dispose();
}
private void dropDown()//下落方法
{
Graphics g=this.CreateGraphics();
switch(currentshape)
{
case 1: if(x>=30&&x<=250&&y>=10&&y<=230)
{
paintBlock(1,Color.Black);
y+=20;
paintBlock(1,Color.Yellow);
}
break;
case 2: if(x>=30&&x<=230&&y>=10&&y<=230)
{
paintBlock(2,Color.Black);
y+=20;
paintBlock(2,Color.Yellow);
}
break;
case 3: if(x>=30&&x<=210&&y>=10&&y<=250)
{
paintBlock(3,Color.Black);
y+=20;
paintBlock(3,Color.Yellow);
}
break;
case 4: if(x>=30&&x<=210&&y>=10&&y<=230)
{
paintBlock(4,Color.Black);
y+=20;
paintBlock(4,Color.Yellow);
}
break;
case 5:if(x>=30&&x<=250&&y>=30&&y<=230)
{
paintBlock(5,Color.Black);
y+=20;
paintBlock(5,Color.Yellow);
}
break;
case 6:if(x>=50&&x<=250&&y>=10&&y<=230)
{
paintBlock(6,Color.Black);
y+=20;
paintBlock(6,Color.Yellow);
}
break;
case 7:if(x>=30&&x<=250&&y>=10&&y<=210)
{
paintBlock(7,Color.Black);
y+=20;
paintBlock(7,Color.Yellow);
}
break;
case 8:if(x>=30&&x<=270&&y>=10&&y<=190)
{
paintBlock(8,Color.Black);
y+=20;
paintBlock(8,Color.Yellow);
}
break;
case 9:if(x>=30&&x<=250&&y>=30&&y<=230)
{
paintBlock(9,Color.Black);
y+=20;
paintBlock(9,Color.Yellow);
}
break;
}
}
private void inite()//初始化
{
for(int i=0;i<15;i++)
for(int j=0;j<15;j++)
{
table[i,j]=1;
} for(int i=0;i<14;i++)
for(int j=1;j<14;j++)
{
table[i,j]=0;
}
}
{
if (testCanDrop())
dropDown();
else
{
disappear();
block(getRandomBlock());
if(testCanDrop()==false)
{
timer1.Stop();
MessageBox.Show("Cow boy, Game over!try again!");
inite();
Graphics g=CreateGraphics();
g.FillRectangle(new SolidBrush(Color.Blue),10,10,300,300);
g.FillRectangle(new SolidBrush(Color.Black),30,10,260,280);
block(getRandomBlock());
timer1.Start();
}
}
}
private void disappear()//消行
{
int n;
Graphics g=this.CreateGraphics();
int i=13;
while(i>=0)
{
n=0;
for(int j=1;j<14;j++)
{
if(table[i,j]==1)
n++;
else
break;
}
if(n==13)
{
for(int k=i;k>0;k--)
for(int w=1;w<14;w++)
{
if(table[k-1,w]==1)
{
g.FillRectangle(new SolidBrush(Color.Yellow),w*20+10,k*20+10,20,20);
g.DrawRectangle(new Pen(Color.Green,2),w*20+10,k*20+10,20,20);
}
else
g.FillRectangle(new SolidBrush(Color.Black),w*20+10,k*20+10,20,20);
table[k,w]=table[k-1,w];
}
}
else
i--;
}
}
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) ////////////////move
{
int a,b;
if((int)e.KeyCode==37)
{
switch(currentshape)
{
case 1: if(x>=50&&x<=250&&y>=10&&y<=250)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b-1]==0&&table[a+1,b-1]==0)
{
paintBlock(1,Color.Black);
x-=20;
paintBlock(1,Color.Yellow);
}
}
break;
case 2: if(x>=50&&x<=230&&y>=10&&y<=250)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b-1]==0&&table[a+1,b]==0)
{
paintBlock(2,Color.Black);
x-=20;
paintBlock(2,Color.Yellow);
}
}
break;
case 3: if(x>=50&&x<=210&&y>=10&&y<=270)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b-1]==0)
{
paintBlock(3,Color.Black);
x-=20;
paintBlock(3,Color.Yellow);
}
}
break;
case 4: if(x>=50&&x<=230&&y>=10&&y<=250)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b-1]==0&&table[a+1,b]==0)
{
paintBlock(4,Color.Black);
x-=20;
paintBlock(4,Color.Yellow);
}
}
break;
case 5: if(x>=50&&x<=250&&y>=10&&y<=250)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b-1]==0&&table[a-1,b]==0&&table[a+1,b]==0)
{
paintBlock(5,Color.Black);
x-=20;
paintBlock(5,Color.Yellow);
}
}
break;
case 6: if(x>=70&&x<=250&&y>=10&&y<=250)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a+1,b-2]==0&&table[a,b-1]==0)
{
paintBlock(6,Color.Black);
x-=20;
paintBlock(6,Color.Yellow);
}
}
break;
case 7: if(x>=50&&x<=250&&y>=10&&y<=230)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b-1]==0&&table[a+1,b-1]==0&&table[a+2,b-1]==0)
{
paintBlock(7,Color.Black);
x-=20;
paintBlock(7,Color.Yellow);
}
}
break;
case 8: if(x>=50&&x<=270&&y>=10&&y<=210)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b-1]==0&&table[a+1,b-1]==0&&table[a+2,b-1]==0&&table[a+3,b-1]==0)
{
paintBlock(8,Color.Black);
x-=20;
paintBlock(8,Color.Yellow);
}
}
break;
case 9: if(x>=50&&x<=250&&y>=10&&y<=230)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b-1]==0&&table[a+1,b-1]==0&&table[a-1,b]==0)
{
paintBlock(9,Color.Black);
x-=20;
paintBlock(9,Color.Yellow);
}
}
break;
}
}
if((int)e.KeyCode==39)
{
switch(currentshape)
{
case 1:if(x>=30&&x<=230&&y>=10&&y<=250)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a+2,b]==0&&table[a+2,b+1]==0)
{
paintBlock(1,Color.Black);
x+=20;
paintBlock(1,Color.Yellow);
}
}
break;
case 2:if(x>=30&&x<=210&&y>=10&&y<=250)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b+3]==0&&table[a+1,b+2]==0)
{
paintBlock(2,Color.Black);
x+=20;
paintBlock(2,Color.Yellow);
}
}
break;
case 3:if(x>=30&&x<=190&&y>=10&&y<=270)
{
a=(y-10)/20;
b=(x-10)/20;
if(table[a,b+4]==0)
{
paintBlock(3,Color.Black);
x+=20;
paintBlock(3,Color.Yellow);
}
}
break;
不过楼上的好像没有写完吧
给我发一个!