⑴ 用jQuery和js寫一個簡單的俄羅斯方塊。急!!!
http://blog.csdn.net/zzvnzz/article/details/7679300
隨便搜的凱扮,你看可以芹虧不嫌孫神
⑵ 這個是俄羅斯方塊中的j源代碼,用來表示方塊的個種形態的, 但這是如何表示的, 這些十六進制的數是什麼意
其實就是點陣圖
一個0x0000的4位16進制數換算成2進制有16位,理解為一個4*4的矩陣
0000
0000
0000
0000
拿長條形的四種狀態舉例
0x0f00 把4位16進制數按每位換算成一行4位陵纖2進制數的納局結果矩陣是尺茄仿
0000
1111
0000
0000
相應的0x4444是
0100
0100
0100
0100
將0看作空的,1看作方塊的塊,就可以看出正好是長條形在4*4空間中的橫豎切換(長條形雖然有四種朝向但其實是兩兩重復的)。
下面的以此類推,比如T型的第一種形態0x04e0就是
0000
0100
1110
0000
⑶ 在這段java代碼--俄羅斯方塊,方塊是怎麼旋轉的
貼出來的代碼還不夠,不過已經基本能回答你的問題了
我的推理過程:從(turnstate+1)%4可以看出,turnstate是一個數字,取值只有0123,因此它僅僅是一個標識符,0123四種取值分別標記著這個方塊處於原狀,旋轉90度,180度或者270度。然後blow函數應該是一個判斷旋轉之後會不會出現和已有方塊重疊的函數。
因此,這個turn函數的功能是:把標識符變成下一個狀態,然後判斷如果旋轉,會不會和已有的方塊重疊,如果重疊,就取消這個旋轉標記的改變。
因此,答案就很明顯了:真正實現旋轉方塊的操作並不在這里,或者說,你再仔細研究一下這個程序的代碼,它可能實際上根本沒有旋轉過那個方塊,只是用turnstate這個數字標記方塊旋轉了多少度,判斷重疊以及繪制的時候才真正計算或者從表裡直接讀取旋轉後狀態而已。
⑷ 俄羅斯方塊的源代碼
俄羅斯方塊C源代碼
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#defineZL4 //坐標增量,不使游戲窗口靠邊
#defineWID36 //游戲窗口的寬度
#defineHEI20 //游戲窗口的高度
inti,j,Ta,Tb,Tc; //Ta,Tb,Tc用於記住和轉換方塊變數的值
inta[60][60]={0}; //標記游戲屏幕各坐標點:0,1,2分別為空、方塊、邊框
intb[4]; //標記4個"口"方塊:1有,0無,類似開關
intx,y,level,score,speed; //方塊中心位置的x,y坐標,游戲等級、得分和游戲速度
intflag,next; //當前要操作的方塊類型序號,下一個方塊類型序號
voidgtxy(intm,intn); //以下聲明要用到的自編函數
voidgflag(); //獲得下一方塊序號
voidcsh(); //初始化界面
voidstart(); //開始部分
voidprfk(); //列印方塊
voidclfk(); //清除方塊
voidmkfk(); //製作方塊
voidkeyD(); //按鍵操作
intifmov(); //判斷方塊能否移動或變體
void clHA(); //清除滿行的方塊
voidclNEXT(); //清除邊框外的NEXT方塊
intmain()
{csh();
while(1)
{start();//開始部分
while(1)
{prfk();
Sleep(speed); //延時
clfk();
Tb=x;Tc=flag;//臨存當前x坐標和序號,以備撤銷操作
keyD();
y++;//方塊向下移動
if(ifmov()==0){y--;prfk();dlHA();break;}//不可動放下,刪行,跨出循環
}
for(i=y-2;i<y+2;i++){if(i==ZL){j=0;}} //方塊觸到框頂
if(j==0){system("cls");gtxy(10,10);printf("游戲結束!");getch();break;}
clNEXT(); //清除框外的NEXT方塊
}
return0;
}
voidgtxy(intm,intn)//控制游標移動
{COORDpos;//定義變數
pos.X=m;//橫坐標
pos.Y=n;//縱坐標
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
voidcsh()//初始化界面
{gtxy(ZL+WID/2-5,ZL-2);printf("俄羅斯方塊");//列印游戲名稱
gtxy(ZL+WID+3,ZL+7);printf("*******NEXT:");//列印菜單信息
gtxy(ZL+WID+3,ZL+13);printf("**********");
gtxy(ZL+WID+3,ZL+15);printf("Esc:退出遊戲");
gtxy(ZL+WID+3,ZL+17);printf("↑鍵:變體");
gtxy(ZL+WID+3,ZL+19);printf("空格:暫停游戲");
gtxy(ZL,ZL);printf("╔");gtxy(ZL+WID-2,ZL);printf("╗");//列印框角
gtxy(ZL,ZL+HEI);printf("╚");gtxy(ZL+WID-2,ZL+HEI);printf("╝");
a[ZL][ZL+HEI]=2;a[ZL+WID-2][ZL+HEI]=2;//記住有圖案
for(i=2;i<WID-2;i+=2){gtxy(ZL+i,ZL);printf("═");}//列印上橫框
for(i=2;i<WID-2;i+=2){gtxy(ZL+i,ZL+HEI);printf("═");a[ZL+i][ZL+HEI]=2;}//下框
for(i=1;i<HEI;i++){gtxy(ZL,ZL+i);printf("║");a[ZL][ZL+i]=2;}//左豎框記住有圖案
for(i=1;i<HEI;i++){gtxy(ZL+WID-2,ZL+i);printf("║");a[ZL+WID-2][ZL+i]=2;}//右框
CONSOLE_CURSOR_INFOcursor_info={1,0};//以下是隱藏游標的設置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
level=1;score=0;speed=400;
gflag();flag=next;//獲得一個當前方塊序號
}
voidgflag() //獲得下一個方塊的序號
{srand((unsigned)time(NULL));next=rand()%19+1; }
voidstart()//開始部分
{gflag();Ta=flag;flag=next;//保存當前方塊序號,將下一方塊序號臨時操作
x=ZL+WID+6;y=ZL+10;prfk();//給x,y賦值,在框外列印出下一方塊
flag=Ta;x=ZL+WID/2;y=ZL-1;//取回當前方塊序號,並給x,y賦值
}
voidprfk()//列印俄羅斯方塊
{for(i=0;i<4;i++){b[i]=1;}//數組b[4]每個元素的值都為1
mkfk();//製作俄羅斯方塊
for(i=x-2;i<=x+4;i+=2)//列印方塊
{for(j=y-2;j<=y+1;j++){if(a[i][j]==1&&j>ZL){gtxy(i,j);printf("□");}}}
gtxy(ZL+WID+3,ZL+1); printf("level:%d",level); //以下列印菜單信息
gtxy(ZL+WID+3,ZL+3); printf("score:%d",score);
gtxy(ZL+WID+3,ZL+5); printf("speed:%d",speed);
}
voidclfk()//清除俄羅斯方塊
{for(i=0;i<4;i++){b[i]=0;}//數組b[4]每個元素的值都為0
mkfk();//製作俄羅斯方塊
for(i=x-2;i<=x+4;i+=2)//清除方塊
{for(j=y-2;j<=y+1;j++){if(a[i][j]==0&&j>ZL){gtxy(i,j);printf("");}}}
}
voidmkfk()//製作俄羅斯方塊
{a[x][y]=b[0];//方塊中心位置狀態:1-有,0-無
switch(flag)//共6大類,19種小類型
{case1:{a[x][y-1]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//田字方塊
case2:{a[x-2][y]=b[1];a[x+2][y]=b[2];a[x+4][y]=b[3];break;}//直線方塊:----
case3:{a[x][y-1]=b[1];a[x][y-2]=b[2];a[x][y+1]=b[3];break;}//直線方塊:|
case4:{a[x-2][y]=b[1];a[x+2][y]=b[2];a[x][y+1]=b[3];break;}//T字方塊
case5:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y]=b[3];break;}//T字順時針轉90度
case6:{a[x][y-1]=b[1];a[x-2][y]=b[2];a[x+2][y]=b[3];break;}//T字順轉180度
case7:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x+2][y]=b[3];break;}//T字順轉270度
case8:{a[x][y+1]=b[1];a[x-2][y]=b[2];a[x+2][y+1]=b[3];break;}//Z字方塊
case9:{a[x][y-1]=b[1];a[x-2][y]=b[2];a[x-2][y+1]=b[3];break;}//Z字順轉90度
case10:{a[x][y-1]=b[1];a[x-2][y-1]=b[2];a[x+2][y]=b[3];break;}//Z字順轉180度
case11:{a[x][y+1]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//Z字順轉270度
case12:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y-1]=b[3];break;}//7字方塊
case13:{a[x-2][y]=b[1];a[x+2][y-1]=b[2];a[x+2][y]=b[3];break;}//7字順轉90度
case14:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x+2][y+1]=b[3];break;}//7字順轉180度
case15:{a[x-2][y]=b[1];a[x-2][y+1]=b[2];a[x+2][y]=b[3];break;}//7字順轉270度
case16:{a[x][y+1]=b[1];a[x][y-1]=b[2];a[x+2][y-1]=b[3];break;}//倒7字方塊
case17:{a[x-2][y]=b[1];a[x+2][y+1]=b[2];a[x+2][y]=b[3];break;}//倒7字順轉90度
case18:{a[x][y-1]=b[1];a[x][y+1]=b[2];a[x-2][y+1]=b[3];break;}//倒7字順轉180度
case19:{a[x-2][y]=b[1];a[x-2][y-1]=b[2];a[x+2][y]=b[3];break;}//倒7字順轉270度
}
}
voidkeyD()//按鍵操作
{if(kbhit())
{intkey;
key=getch();
if(key==224)
{key=getch();
if(key==75){x-=2;}//按下左方向鍵,中心橫坐標減2
if(key==77){x+=2;}//按下右方向鍵,中心橫坐標加2
if(key==72)//按下向上方向鍵,方塊變體
{if(flag>=2&&flag<=3){flag++;flag%=2;flag+=2;}
if(flag>=4&&flag<=7){flag++;flag%=4;flag+=4;}
if(flag>=8&&flag<=11){flag++;flag%=4;flag+=8;}
if(flag>=12&&flag<=15){flag++;flag%=4;flag+=12;}
if(flag>=16&&flag<=19){flag++;flag%=4;flag+=16;}}
}
if(key==32)//按空格鍵,暫停
{prfk();while(1){if(getch()==32){clfk();break;}}} //再按空格鍵,繼續游戲
if(ifmov()==0){x=Tb;flag=Tc;} //如果不可動,撤銷上面操作
else{prfk();Sleep(speed);clfk();Tb=x;Tc=flag;} //如果可動,執行操作
}
}
intifmov()//判斷能否移動
{if(a[x][y]!=0){return0;}//方塊中心處有圖案返回0,不可移動
else{if((flag==1&&(a[x][y-1]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||
(flag==2&&(a[x-2][y]==0&&a[x+2][y]==0&&a[x+4][y]==0))||
(flag==3&&(a[x][y-1]==0&&a[x][y-2]==0&&a[x][y+1]==0))||
(flag==4&&(a[x-2][y]==0&&a[x+2][y]==0&&a[x][y+1]==0))||
(flag==5&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y]==0))||
(flag==6&&(a[x][y-1]==0&&a[x-2][y]==0&&a[x+2][y]==0))||
(flag==7&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x+2][y]==0))||
(flag==8&&(a[x][y+1]==0&&a[x-2][y]==0&&a[x+2][y+1]==0))||
(flag==9&&(a[x][y-1]==0&&a[x-2][y]==0&&a[x-2][y+1]==0))||
(flag==10&&(a[x][y-1]==0&&a[x-2][y-1]==0&&a[x+2][y]==0))||
(flag==11&&(a[x][y+1]==0&&a[x+2][y-1]==0&&a[x+2][y]==0))||
(flag==12&&(a[x][y-1]==0&&a[x][y+1]==0&&a[x-2][y-1]==0))||
( flag==13 && ( a[x-2][y]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||
( flag==14 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y+1]==0 ) ) ||
(flag==15 && ( a[x-2][y]==0 && a[x-2][y+1]==0 && a[x+2][y]==0 ) ) ||
(flag==16 && ( a[x][y+1]==0 && a[x][y-1]==0 && a[x+2][y-1]==0 ) ) ||
( flag==17 && ( a[x-2][y]==0 && a[x+2][y+1]==0 && a[x+2][y]==0 ) ) ||
(flag==18 && ( a[x][y-1]==0 &&a[x][y+1]==0 && a[x-2][y+1]==0 ) ) ||
(flag==19 && ( a[x-2][y]==0 && a[x-2][y-1]==0
&&a[x+2][y]==0))){return1;}
}
return0; //其它情況返回0
}
voidclNEXT() //清除框外的NEXT方塊
{flag=next;x=ZL+WID+6;y=ZL+10;clfk();}
void clHA() //清除滿行的方塊
{intk,Hang=0; //k是某行方塊個數,Hang是刪除的方塊行數
for(j=ZL+HEI-1;j>=ZL+1;j--)//當某行有WID/2-2個方塊時,則為滿行
{k=0;for(i=ZL+2;i<ZL+WID-2;i+=2)
{if(a[i][j]==1)//豎坐標從下往上,橫坐標由左至右依次判斷是否滿行
{k++; //下面將操作刪除行
if(k==WID/2-2) { for(k=ZL+2;k<ZL+WID-2;k+=2)
{a[k][j]=0;gtxy(k,j);printf("");Sleep(1);}
for(k=j-1;k>ZL;k--)
{for(i=ZL+2;i<ZL+WID-2;i+=2)//已刪行數上面有方塊,先清除再全部下移一行
{if(a[i][k]==1){a[i][k]=0;gtxy(i,k);printf("");a[i][k+1]=1;
gtxy(i,k+1);printf("□");}}
}
j++;//方塊下移後,重新判斷刪除行是否滿行
Hang++;//記錄刪除方塊的行數
}
}
}
}
score+=100*Hang; //每刪除一行,得100分
if(Hang>0&&(score%500==0||score/500>level-1)) //得分滿500速度加快升一級
{speed-=20;level++;if(speed<200)speed+=20; }
}
⑸ 用c語言編寫俄羅斯方塊程序 求詳解
1、用C語言繪制圖形界面
EasyX圖形庫(http://www.easyx.cn)即TC的圖形庫在VC下的移植。
包含庫#include <graphics.h>
先初始化圖形窗口
initgraph(WINDOW_WIDTH, WINDOW_HIGH) ;WINDOW_WIDTH為窗口的寬頻,WINDOW_HIGH為窗口的高度。
清空繪圖設備
cleardevice();
設置畫筆顏色
setcolor(RED) ;
設置線條風格
setlinestyle(PS_SOLID, NULL, 0);
畫矩形
rectangle
還有畫線、顯示文字等函數,可以參照其幫助文檔。
注意:由於我們用的是EasyX圖形庫,故源文件後綴要為.cpp,但其中內容都是C的語法。
2、存儲表示出俄羅斯方塊的形狀
一、我們可以用編號,不同的編號代表不同的俄羅斯方塊,根據編號把不同方塊的畫法寫在代碼中,這樣19種
方塊就得有19種相應的代碼來描繪。而且這樣擴展性不好,若以後設計了新的方塊,則需要更改大量源代碼。
二、我們很自然的想到可用字模點陣的形式來表示,即設置一個4行4列的數組,元素置1即代表這個位置有小
方塊,元素置0即代表這個位置無小方塊,這個整個的4*4的數組組成俄羅斯方塊的形狀。
1000
1000
1100
0000
我們把俄羅斯方塊點陣的數位存在rockArray中,我們可以事先把這19種方塊的字模點陣自己轉化成十六進制,然後在rockArray數組的初始化時賦值進去。
但這樣做未免有點太費力,且擴展性也不太好,若以後設計的新方塊種類加入,要改變數組rockArray中的值。
我們可以考慮把所有俄羅斯方塊的點陣存儲在配置文件中,在程序初始化時讀取文件,把這些點陣轉換成unsigned int的變數存儲在rockArray中。
這樣,以後我們增添新的方塊形狀只需要在配置文件中增加新的點陣即可。
@###
@###
@@##
####(為使得看起來更醒目,我們用@表示1,用#表示0)
3、讓圖形動起來
在某位置處用函數DrawRock在屏幕上畫出俄羅斯方塊,然後再擦除掉(即用背景色在原位置處重繪一次方塊),最後在下落的下一個位置處用函數DrawRock在屏幕上畫出俄羅斯方塊,如此循環,中間用計時器間隔一段時間以控制下落的速度。
同理,按下屏幕的左右鍵也是如此,只是在按下鍵盤時把方塊的位置重新計算了。
那麼按下上方向鍵時,如何讓方塊翻轉呢?
我們在配置文件中就把方塊的順時針翻轉形態放在了一起:
@###
@###
@@##
####
@@@#
@###
####
####
@@##
#@##
#@##
####
##@#
@@@#
####
####
我們每按一次上方向鍵改變一次方塊的形狀即可。若一直按上鍵,形狀應該是循環地翻滾。
我們想到了循環鏈表的數據結構可實現這個效果。
可是我們若把這些一種類的方塊的各種形態串成循環鏈表形式,那麼每次重新生成方塊時我們就難以隨機地生成方塊了。
故還是得用數組來存儲,但又要有循環鏈表的功能,於是我們想到了靜態循環鏈表。
我們用結構體來作為一個方塊在rockArray中的元素
typedef struct ROCK
{ //用來表示方塊的形狀(每一個位元組是8位,用每4位表示方塊中的一行)
unsigned int rockShapeBits ;
int nextRockIndex ; //下一個方塊,在數組中的下標
} RockType ;
這樣,當我們按下上方向鍵時,把傳入函數DrawRock中的rockIndex變為當前方塊結構體中的nextRockIndex即可。
⑹ 用Java設計網路版俄羅斯方塊會遇到哪些難點(急)
(Java ) . 1.1 開發一個俄羅斯方塊游戲。游戲者移動和旋轉窗口內落下的方塊,方塊在一行堆滿後就岩穗可以消掉,並得到相應的分數;如果方塊堆積至窗口頂端,即告負。 1.2 在游戲程序中,我們可以將它看成3 個對象,分別是程序窗體主類對象、方塊數據管理對象、控制游戲自動下落的定時器線程對象、三個背景音樂對象。 窗體主類對象: 方塊數據管理對象: 控制游戲自動下落的定時器線程對象: 三個背景音樂對象: 1.3 開發工具:Sun NetBeans IDE 6.1 NetBeans IDE 是一個為軟體開發者提供的自由、開源的集成開發環境。您可以從中獲得您所需要的所有工具,用 Java、C/C++ 甚至是 Ruby 來創建專業的桌面應用程序、企業應用程序、web 和移動應用程序。此 IDE 可以在多種平台上運行,包括 Windows、Linux、Mac OS X 以及 Solaris;它易於安裝且非常方便使用。6.0 發行版包含了重要的增強功能和新特性,包括完全重寫的編輯器基礎結構、對擴展語言的支持、新的生產率特性,以及一個能讓您根據實際需求安裝並配置 IDE 的簡化安裝過程。 . 2.1 游戲數據與界面顯示相分離,用游戲結構數據描述游戲的狀態,玩家操作或游戲自行走一步,程序中都通過粗神卜修改游戲數據來體現,即每走一步,程序會修改當前的游戲數據,判斷游戲是否結束了,也是通過對游戲數據的分析來作出結論。游戲界面是根據當時游戲數據來繪制的,當數據改變時,要清除原圖形並重繪。總之,游戲的邏輯設計是針對游戲數據,而不是游戲界面。界面只是間接地向玩家顯示結果。因此,在設計函數時,大致分二類:與玩家操作事件有關的數據處理函數,與界面效果有關的圖形繪制函數。游戲運行過程由窗體監聽到的鍵盤事件控制 主要流程圖如下: 製造新的方塊 方 向鍵 的控 制與方法 IsCanChangeTo() Anthem類 游戲背景音樂當游戲開始時啟動 Class RussionGame clearblock() makeblock() moveright() movedown() moveleft() turnleft() turnright() Anthem2 類 按鍵的聲音當觸發方向鍵的方法時響應 formKeyPressed() 當游戲結束後啟動另一首音樂 定義一個線程類,在後台自動地按游戲速度,移動方塊。 CheckAndCutLine() IsOver() Anthem3 類 檢查某一行是否為全填充,如是,消掉並返回1 IsHitBottom() 判斷當前方塊是否已觸底,並處理 TimerRuner 游戲數據管理對象:主要管理著兩方面數據:方塊的坐標數據和游戲空間數據。用成員數組變數描述游戲空間狀態,根據游戲空間狀態判斷游戲是否結束。用它的成員變數保存方塊的形狀數據及坐標數據,定義當方塊走動方塊數據變化的處理方法。此外,還把各種游戲屬性數據作為其成員變數。 控制游戲自動下落的定時器線程對象:是一個線程類派生對象,獨立運行,每隔一段時間控制方塊下落下格。 窗體界面主類對象:負責繪制游戲圖象、包含游戲設置的各種控制項(如:設置速度的文本框、顯示得分的標簽、開始及暫停按鈕),負責游戲的各種屬性數據的讀入及顯示輸出,最重要的是:瞎橋它還是一個鍵盤事件處理類,監聽玩家的鍵盤操作,處理鍵盤事件,在鍵盤事件處理函數中調用游戲數據管理對象的方法,控制游戲的運行。我們還把游戲數據管理對象、控制游戲自動下落的定時器線程對象作為它的成員變數。 往面板中加入需要的控制項(2 個 Jlable,2 個 JcomboBox,4 個 Jbottun),並布置好它們的位置,並重命名控制項對象變數的名稱,如上圖: 2.3 1. 首先對於方塊的構造分析,可以用一個三維數組來表示,方塊總共有四種基本形,其它形狀可由這四種基本形通過旋轉得到,如下圖: class RussionBlockGame { final int sp_WIDTH = 20; // final int sp_HIGHT = 20; // final int boxtypes[4][4][2]={ {{-1,0},{0,0},{1,0},{2,0}}, {{-1,0},{0,0},{1,0},{1,-1}}, {{-1,0},{0,0},{1,0},{0,-1}}, {{-1,0},{0,0},{1,0},{-1,-1}} };/* */ int box[4][2]; /* */ int cx, cy; /* */ int type; /* ( 0,1,2,3)*/ int block_box[][]=new int[4][2]; /* */ int block_cx, block_cy; /* */ int block_type; /* ( 0,1,2,3)*/ int gamespace[][] = new int[sp_HIGHT][sp_WIDTH] ; void makeblock()// { block_type = (int)(Math.random()*100)%4;//產生一個1-4 的隨機數 for(int i=0; i<4;i++) block_box[i] = types[block_type][i]; block_cx=sp_WIDTH/2; block_cy=0; } HIGHT WIDTH (cx,cy)= (11,4) (WIDTH-1,HIGHT-1) 游戲空間可以看成由sp_WIDTH × sp_HIGHT 個正方形小格子構成,每格子都有一個相對於左上角的坐標。可以用一個sp_WIDTH × sp_HIGHT 的二維數組表示游戲空間。如下: int gamespace[sp_WIDTH][sp_HIGHT]; 某格子對應的數組元素的值為1,表示此格子已被方塊填充,為0 表示未被填充。 在游戲空間中,被方塊填充了的格子為深灰色,未被填充的格子為白色(底色),灰色格子觸及空間頂部時,游戲結束。即gamespace[0](二維數組第一排)中有元素的值為1 時,游戲結束。下面是判斷游戲是否結束的程序: boolean IsGameOver() { boolean flag=false; for(int i=0; i=sp_WIDTH || y>=sp_HIGHT|| (y>0 && gamespace[y][x]==1)) { IsCan = false; break;} } return IsCan; } 4. , 判斷方塊是否已落到底,就是判斷方塊中每個小正方形格的正下方位置是否已被填充或出下界。 如已到底,把方塊所在的位置(格子)填充(對應 gamespace 1),還要查看是否有某行已被全填充,把被全填充的行消掉,並給用戶加分,程序片段如下: boolean IsHitBottom( ) / { boolean flag =false ; int i, x, y; for (i=0; i<4; i++) { x= block_cx + block_box[i][0]; y= block_cy + block_box[i][1] + 1 ; if ( y>=sp_HIGHT|| gamespace[y][x]==1) { flag = true; break; } } if( flag ) { for (i=0; i<4; i++) { x= block_cx + block_box[i][0] ; y= block_cy + block_box[i][1] ; if(y>=0) { gamespace[y][x]=1;} } for (i=0; i<4; i++) { y= block_cy + block_box[i][1] ; while(y>=0 && CheckAndCutLine(y)) m_score += 100; } isplaying = ! IsGameOver(); } return flag; } 開始音樂時已被循環播放 w1.audioClips.loop(); Anthem2 w2 = new Anthem(); 當觸發到按鍵事件時執行formKeyPressed 方法,每當系統取得某一個按鍵的鍵碼時程序都會自動執行w2.audioClips2.play();直到游戲結束。 Anthem2 w3 = new Anthem() ; 當觸發到game.IsOver 方法時證明游戲已結束這時程序會調用 w1.audioClips.stop(); w3.audioClips3.play(); 背景音樂消失,結束音樂開始。 6. 游戲窗體的設計視圖中,選擇「開始游戲」按鈕,再右鍵點擊「開始游戲」按鈕,從菜單中選「事件」->「Action」事件類型->「actionPerformed」介面方法,將轉到源視圖中事件處理代碼處,加入我們的處理代碼,使得游戲開始,如下: private void jButton_startActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=true; this.requestFocusInWindow(); new TimerRuner(this); } 用同樣的方法編寫「暫停游戲」、「結束游戲」、「退出遊戲」的點擊事件處理代碼,代碼如下: private void jButton_stopActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=false; } private void jButton_overActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=false; game.cleargamespace(); } private void jButton_exitActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=false; System.exit(0); } 2.4 功能: 具有等級功能,不同的等級游戲的難度不一樣; 具有分數功能,消行可以得到分數; 具有聲音,有背景音和執行不同的操作出現不同的聲音; 具有設置功能,可以用來設置初始等級、開始行數、按鍵設置等。 3. /number2 方塊向下 /number4:方塊向下 /number3:方塊向右 PageDown 方塊向右翻傳 End 方塊向左傳 Start 游戲開始 背景音樂的開關 Stop 暫停游戲 over 停止游戲 Speed:調整速度 :選擇方塊的背景色(默認為淺藍) 程序運行結果大部分按照預期設計一樣,但背景色的改變有時響應過慢,而且每次打開音樂後必須重新按下start 鍵,這是該游戲的缺陷之一。鑒於此,已作出部分修正,雖然還沒有達到游戲更加人性化,但基本上能滿足游戲的多方面的需要了。
⑺ 用JS做一個俄羅斯方塊的頁面游戲
你提到的這倆個編程語言其實都是可以分開來學的,他們的結合僅在於前台頁面中,JAVASCRIPT處理前台頁面的用戶交互,當然也可以通過AJAX獲取後台數據。ASP主要用於後台的數旦嫌困據處理,所以,你可以花掉大概10天時間來學習JAVASCRIPT,然後再花10天時間學習ASP即可。關鍵是要邊學邊練習,很快就上手了,者歲只看不練,永遠都學不好的!給你推薦幾個我覺得好教程的!W3school 專業的教程學習: 正則30分鍾 高手的必經之路: JS從糊塗到明白 - 一步一步編寫計算器 由淺入深快速進階
如果幫助到您,請記得採納為滿意答案哈,謝謝!祝您生活模念愉快! vae.la
⑻ 關於游戲俄羅斯方塊(JAVA語言做的)項目答辯時,老師通常會問什麼問題求助高手,並解答,謝謝
我以前同學也是做這個畢業設計的。不過是用C++做的。我記得評委提了幾個問題。
1、俄羅斯方塊已經是很老的游戲了,你做的俄羅斯方塊與我們平時見過的有什麼區別?創新點在哪裡?這個問題是百分之百會問的。
回答:就要看你到底有沒有創新,怎麼去和一般的俄羅斯方塊比較,要好好總結一下。
2、這個畢業設計的工作量、代碼量。
回答:從你開始收集需求分析開始,時間統計,代碼量粗略統計。
3、你覺得這個俄羅斯方塊還有什麼不足,怎麼改進?
回答:比如界面要更加人性化,音效還不夠完美……還要增加多人對戰模式等等
4、你實現項目的主要技術,核心演算法有哪些?
回答:介紹主要技術,演算法參考。
基本上記得的就這些,希望你順利通過。
⑼ java寫俄羅斯方塊什麼水平
您好,要寫俄羅斯方塊,,並且回答完整,不要出現重復,那麼您需要具備基本的Java編程技能。要開發俄羅斯方塊,您需要具備以下技能:
1. 基本的Java編程技能:您需要熟悉Java的基本語法,包括變數、類、方法、介面等,以及如何使用Java進叢改行編程。
2. 對圖形用戶界面(GUI)的理解:您需要熟悉如何使用Java來創建圖形用戶界面,以及如何使用GUI來控制俄羅斯方塊的游戲進程。
3. 對俄羅斯方塊游戲規則的滲兆判理解:您需要熟悉俄羅斯方塊的游戲規則,以及如何使用Java編程來實現這些規則。
4. 對演算法的理解:您需要熟悉如何使用演算法來實現俄羅斯方塊的游戲進程,以及如何使用演算法來控制俄羅斯方塊的游戲進程。
5. 對數據結構的理解:您需要熟悉如何使用數據結構來存儲俄羅斯方塊的游戲數據,以及如何使用數據結構來實現俄羅斯方塊的游戲進程。
6. 對調試工具的理解:您需要熟悉如何使用調試工具來檢查俄羅斯方塊的游戲代碼,以及如何使用調試工具來定位和修復游戲中的錯誤。
7. 對測試工具的理解:您需要熟悉如猜陪何使用測試工具來測試俄羅斯方塊的游戲代碼,以及如何使用測試工具來確保游戲的正確性。
總之,要寫俄羅斯方塊,您需要具備基本的Java編程技能,以及對圖形用戶界面、俄羅斯方塊游戲規則、演算法、數據結構和調試工具的理解,以及對測試工具的理解。只有具備了這些技能,您才能夠開發出一款完整的俄羅斯方塊游戲。