private void map_KeyDown(Object sender, KeyEventArgs k)
{
switch( (int)k.KeyCode )
{
case 37:if(elosEx.will_chang(-1,0))elosEx.do_chang(-1,0); break;
case 38:if(elosEx.will_up())elosEx.do_up(); break;
case 39:if(elosEx.will_chang(1,0))elosEx.do_chang(1,0); break;
case 40:if(elosEx.will_chang(0,1))elosEx.do_chang(0,1); break;
case 113:elosEx.reset();break;
}
draw();
}
}
这是dll文件:
using System;
namespace Bedlang{
public class Elos{
private int itx, ity; //参考坐标
private int rndX, rndY, trndX, trndY; //得到资源的参数
private bool[,] map = new bool[22,12]; //地图
private string[,] source = new string[11,4];//所有方块资源
private int[,] it = new int[4,2]; //当前方块的形状
private int countnumber, nextnum; //总分,一个方块下落的次数
private Random rnd = new Random();
public Elos(){
//方块资源: | # 7 L S Z |-
source[0,0]="21222324";source[0,1]="12223242";source[0,2]="21222324";source[0,3]="12223242";
source[1,0]="12132223";source[1,1]="12132223";source[1,2]="12132223";source[1,3]="12132223";
source[2,0]="21222332";source[2,1]="11213122";source[2,2]="21222312";source[2,3]="21122232";
source[3,0]="21313233";source[3,1]="31122232";source[3,2]="21222333";source[3,3]="11213112";
source[4,0]="21222333";source[4,1]="11213112";source[4,2]="21313233";source[4,3]="31122232";
source[5,0]="11122223";source[5,1]="12212231";source[5,2]="11122223";source[5,3]="12212231";
source[6,0]="12132122";source[6,1]="11212232";source[6,2]="12132122";source[6,3]="11212232";
}
public void do_chang(int x, int y){ //移动
int i;
for(i=0;i<4;i++)map[it[i,1]+ity,it[i,0]+itx]=false;
ity+=y;itx+=x; //参照点位置移动
for(i=0;i<4;i++)map[it[i,1]+ity,it[i,0]+itx]=true;
if(y==1)++nextnum; //下落次数
}
public bool will_chang(int x, int y){ //测试能否移动
int i,tempitx,tempity;
bool falg=false;
tempitx=itx; tempity=ity;
tempitx+=x; tempity+=y;
for(i=0;i<4;i++)map[it[i,1]+ity,it[i,0]+itx]=false;
for(i=0;i<4;i++){
if (tempitx+it[i,0]<1 || tempitx+it[i,0]>=11) falg=true; //X越界
if (tempity+it[i,1]<1 || tempity+it[i,1]>=21) falg=true; //Y越界
if (map[it[i,1]+tempity,it[i,0]+tempitx]) falg=true; //有阻碍物
}
for(i=0;i<4;i++)map[it[i,1]+ity,it[i,0]+itx]=true;
if(falg)return false;
return true;
}
public void do_up(){ //变形
int i;
string temp;
for(i=0;i<4;i++)map[it[i,1]+ity,it[i,0]+itx]=false;
if(++trndY>=4)trndY=0;
temp = source[trndX,trndY];
for(i=0;i<4;i++){
it[i,0]=temp[i*2]-'0';
it[i,1]=temp[(i+1)*2-1]-'0';
map[it[i,1]+ity,it[i,0]+itx]=true;
}
}
public bool will_up(){ //测试能否变形
int i,temprndY;
bool falg=false;
int[,] tempit = new int[4,2];
string temp;
temprndY=rndY;
if(++temprndY>=4)temprndY=0;
temp=source[rndX,temprndY];//获取下一个方块资源
for(i=0;i<4;i++)map[it[i,1]+ity,it[i,0]+itx]=false;//先使当前方块消失
//虚变形
for(i=0;i<4;i++){
tempit[i,0]=temp[i*2]-'0';
tempit[i,1]=temp[(i+1)*2-1]-'0';
if (itx+tempit[i,0]<=0 || itx+tempit[i,0]>=11) falg=true; //X越界
if (ity+tempit[i,1]<=0 || ity+tempit[i,1]>=21) falg=true; //Y越界
if (map[tempit[i,1]+ity,tempit[i,0]+itx]) falg=true; //有阻碍物
}
for(i=0;i<4;i++)map[it[i,1]+ity,it[i,0]+itx]=true;//还原消失方块
if(falg)return false;
return true;
}