求解释!!!!!!

向上吧少年 2012-02-23 02:10:08
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 俄罗斯方方块
{
public partial class Form1 : Form
{
public Form1()
{
this.Load += new System.EventHandler(load);
InitializeComponent();
}
Point[,] ai ={{new Point(150,0),new Point(150,-30),new Point(120,-30),new Point(180,-30)},//T
{new Point(150,0),new Point(150,-30),new Point(150,-60),new Point(150,-90)},//长条
{new Point(150,0),new Point(150,-30),new Point(150,-60),new Point(120,-60)},//L
{new Point(150,0),new Point(180,0),new Point(150,-30),new Point(120,-30)},//Z
{new Point(150,0),new Point(180,0),new Point(150,-30),new Point(180,-30)}};//方块
Label a = new Label();
Label b = new Label();
Label c = new Label();
Label d = new Label();//用户控制的方块
Random r = new Random();//随机种子
int bi = 0;//方块的种类
Timer tm = new Timer();//计时器
private void load(object sender, EventArgs e)
{
Width = 300;
Height = 360;
Location = new Point(500, 150);
Text = "俄罗斯方块";
KeyPreview = true;
KeyPress += new KeyPressEventHandler(press);//布局
a.Size = b.Size = c.Size = d.Size = new Size(30, 30);
a.BackColor = b.BackColor = c.BackColor = d.BackColor = Color.Red;
Controls.Add(a);
Controls.Add(b);
Controls.Add(c);
Controls.Add(d);//画方块
xuanze();
//计时器
tm.Enabled = true;
tm.Interval = 700;
tm.Tick += new EventHandler(jishi);
}
void xuanze()//选择种类
{
bi = r.Next(0, 5);
a.Location = ai[bi, 0];
b.Location = ai[bi, 1];
c.Location = ai[bi, 2];
d.Location = ai[bi, 3];
jieshu();
}
void press(object sender, KeyPressEventArgs e)
{
int i=0;
string key = e.KeyChar.ToString();
if (key == "a") i=xialuo(-30, 0);
if (key == "d") i=xialuo(30, 0);
if (key == "s") i = xialuo(0, 30);//移动碰撞判断
if (key == "s" && (a.Top == 300 || b.Top == 300 || c.Top == 300 || d.Top == 300)) i = 1;//移动出界判断
if (key == "a" && (a.Left == 0 || b.Left == 0 || c.Left == 0 || d.Left == 0)) i = 1;
if (key == "d" && (a.Left == 270 || b.Left == 270 || c.Left == 270 || d.Left == 270)) i = 1;
if (key == "w") i = xuanzhuan();//旋转碰撞判断
if(i==0)
switch (key)
{
case "a": a.Left -= 30; b.Left -= 30; c.Left -= 30; d.Left -= 30; break;
case "d": a.Left += 30; b.Left += 30; c.Left += 30; d.Left += 30; break;
case "s": a.Top += 30; b.Top += 30; c.Top += 30; d.Top += 30; break;
case "w":
if (bi<4)//if里面是旋转的算法
{
int m = b.Top - 30, n = b.Left - 30;
c.Location = new Point(c.Top - m + n, 60 - (c.Left - n) + m);
a.Location = new Point(a.Top - m + n, 60 - (a.Left - n) + m);
d.Location = new Point(d.Top - m + n, 60 - (d.Left - n) + m);
}
break;
}
}
void jishi(object sender, EventArgs e)
{
if (xialuo(0, 30) == 1) huahua();
panduan();
a.Top += 30; b.Top += 30; c.Top += 30; d.Top += 30;

}
void panduan()////最下碰撞判断
{
if (a.Top == 300 || b.Top == 300 || c.Top == 300 || d.Top == 300)
huahua();
}
void huahua()//画画- -!
{
Point[] pp={a.Location,b.Location,c.Location,d.Location};
for (int i = 0; i < 4; i++)
{
Label s = new Label();
s.BackColor = Color.Blue;
s.Size = new Size(30, 30);
s.Location = pp[i];
Controls.Add(s);
}
xiaotu();
xuanze();
}
int xialuo(int x,int y)//移动碰撞判断
{
foreach (Control i in Controls)
if (i.BackColor == Color.Blue)
if (i.Location == new Point(a.Left + x, a.Top + y) || i.Location == new Point(b.Left + x, b.Top + y) || i.Location == new Point(c.Left + x, c.Top + y) || i.Location == new Point(d.Left + x, d.Top + y))
return 1;
return 0;
}
int xuanzhuan()//旋转碰撞判断
{
Point[] pp = { a.Location, b.Location, c.Location, d.Location };
int m = pp[1].Y - 30, n = pp[1].X - 30;
pp[2]= new Point(pp[2].Y - m + n, 60 - (pp[2].X - n) + m);
pp[0] = new Point(pp[0].Y - m + n, 60 - (pp[0].X - n) + m);
pp[3] = new Point(pp[3].Y - m + n, 60 - (pp[3].X - n) + m);
foreach (Control i in Controls)
if (i.BackColor == Color.Blue)
if(i.Location==pp[1]||i.Location==pp[0]||i.Location==pp[2]||i.Location==pp[3])
return 1;
return 0;
}
void xiaotu()//消图
{
int k = 0;
for(int m=0;m<4;m++)
for (int i = 0; i <= 300; i += 30)
{
k = 0;
foreach (Control l in Controls)
if (l.BackColor == Color.Blue && l.Top == i)
k++;
if (k > 9)
foreach (Control l in Controls)
{
if (l.Top == i)
l.Location = new Point(-100, -100);
if (l.Top <i)
l.Top += 30;
}
}
foreach(Control l in Controls)
if(l.Location==new Point(-100,-100))
Controls.Remove(l);
}
void jieshu()//游戏结束判断
{
foreach(Control i in Controls)
if(i.BackColor==Color.Blue)
if (i.Location == a.Location || i.Location == b.Location || i.Location == c.Location || i.Location == d.Location)
{
tm.Stop();
MessageBox.Show("游戏结束");
Close();
}
}
}
}
上面这段代码是别人写的,我下载只为研究下,增强自己的能力,可是好多地方不太懂,所有希望各位大神,帮忙解释下。。
越详细越好。

...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-02-25
  • 打赏
  • 举报
回复
是的,一步不调试。
向上吧少年 2012-02-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangshunqi1234 的回复:]
呵呵,这怎么解释,基础的东西你应该自己先看看,直接用工具调试一下,然后遇到不懂的地方你备注出来多好啊,再说了,这么长的代码如何解释,还用给你解释for循环啊
你可以先看看书,了解一下语法的东西,遇到不明白的代码可以加上备注贴出来,那样解释还有点针对性
[/Quote]
我会的,谢谢你了,我学的最基础的,只是还没学到哪里而已。
王顺起 2012-02-23
  • 打赏
  • 举报
回复
呵呵,这怎么解释,基础的东西你应该自己先看看,直接用工具调试一下,然后遇到不懂的地方你备注出来多好啊,再说了,这么长的代码如何解释,还用给你解释for循环啊
你可以先看看书,了解一下语法的东西,遇到不明白的代码可以加上备注贴出来,那样解释还有点针对性
ooo7880000 2012-02-23
  • 打赏
  • 举报
回复
没有基础。。再解释也没用。。去看看基础的书吧。。
向上吧少年 2012-02-23
  • 打赏
  • 举报
回复
我放在上面看了,还调试了,就是不知道它们有些什么作用。
bdmh 2012-02-23
  • 打赏
  • 举报
回复
让我们给你做翻译呀,基本意思你应该明白了,看不懂就放到自己的程序中运行,一句一句的看结果和现象
满衣兄 2012-02-23
  • 打赏
  • 举报
回复
一句句的看,多看几遍,从功能上去理解。不要找一段代码就贴上来叫别人解释,这不是学习的方法。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧