c语言程序设计俄罗斯方块PPT,俄罗斯方块游戏:C语言程序设计初步感受
C語言課程設以一節課,老師提供了一個C語言的俄羅斯方塊游戲讓我們感受,本學期C語言課程,主要是各種語句的練習,這次是用以前的知識來感受一個實際的系統。
首先安裝c-free,然后打開老師所發給我們的小程序。
界面很簡單,沒想到C語言還能做這么有意思的東西,真是沒有想到。
分析一下程序,感覺比較太復雜的,但就是本學期學習的簡單語句的組合,運用起來如此神奇。
1、首先是在屏幕上顯示的語句printf
2、運用for語句建立窗口
for(i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(hOut,FrameX+i,FrameY);
printf("═"); ? ? ? ? //打印上橫框
}
for(i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(hOut,FrameX+i,FrameY+Frame_height);
printf("═"); ? ? ? ? //打印下橫框
a[FrameX+i][FrameY+Frame_height]=2; ? ?//記住下橫框有圖案
}
for(i=1;i
{
gotoxy(hOut,FrameX,FrameY+i);
printf("║"); ? ? ? ? //打印左豎框
a[FrameX][FrameY+i]=2; ? ? ? //記住左豎框有圖案
}
for(i=1;i
{
gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);
printf("║"); ? ? ? ? //打印右豎框
a[FrameX+2*Frame_width-2][FrameY+i]=2; ? //記住右豎框有圖案
}
3、制作俄羅斯方塊并將其進行旋轉
void make_tetris(struct Tetris *tetris)
{
a[tetris->x][tetris->y]=b[0]; ? ?//中心方塊位置的圖形狀態:1-有,0-無
switch(tetris->flag) ? ? ?//共6大類,19種類型
{
case 1: ? ? ? ? //田字方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 2: ? ? ? ? //直線方塊:----
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y]=b[2];
a[tetris->x+4][tetris->y]=b[3];
break;
}
case 3: ? ? ? ? //直線方塊: |
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y-2]=b[2];
a[tetris->x][tetris->y+1]=b[3];
break;
}
case 4: ? ? ? ? //T字方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y]=b[2];
a[tetris->x][tetris->y+1]=b[3];
break;
}
case 5: ? ? ? ? //T字順時針轉90度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x-2][tetris->y]=b[3];
break;
}
case 6: ? ? ? ? //T字順時針轉180度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 7: ? ? ? ? //T字順時針轉270度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 8: ? ? ? ? //Z字方塊
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x+2][tetris->y+1]=b[3];
break;
}
case 9: ? ? ? ? //Z字順時針轉90度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x-2][tetris->y+1]=b[3];
break;
}
case 10: ? ? ? ?//Z字順時針轉180度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 11: ? ? ? ?//Z字順時針轉270度方塊
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 12: ? ? ? ?//7字方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x-2][tetris->y-1]=b[3];
break;
}
case 13: ? ? ? ?//7字順時針轉90度方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x-2][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 14: ? ? ? ?//7字順時針轉180度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y+1]=b[3];
break;
}
case 15: ? ? ? ?//7字順時針轉270度方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 16: ? ? ? ?//倒7字方塊
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y-1]=b[3];
break;
}
case 17: ? ? ? ?//倒7字順指針轉90度方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x-2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case 18: ? ? ? ?//倒7字順時針轉180度方塊
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x][tetris->y+1]=b[2];
a[tetris->x-2][tetris->y+1]=b[3];
break;
}
case 19: ? ? ? ?//倒7字順時針轉270度方塊
{
a[tetris->x-2][tetris->y]=b[1];
a[tetris->x+2][tetris->y+1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
}
4、判斷是否滿行并刪除滿行的俄羅斯方塊
void del_full(HANDLE hOut,struct Tetris *tetris)
{ ? ? ? //當某行有Frame_width-2個方塊時,則滿行
int k,del_count=0; ?//分別用于記錄某行方塊的個數和刪除方塊的行數的變量
for(j=FrameY+Frame_height-1;j>=FrameY+1;j--)
{
k=0;
for(i=FrameX+2;i
{
if(a[i][j]==1) //豎坐標依次從下往上,橫坐標依次由左至右判斷是否滿行
{
k++; ?//記錄此行方塊的個數
if(k==Frame_width-2)
{
for(k=FrameX+2;k
{ ?//刪除滿行的方塊
a[k][j]=0;
gotoxy(hOut,k,j);
printf(" ?");
Sleep(1);
}
for(k=j-1;k>FrameY;k--)
{ ?//如果刪除行以上的位置有方塊,則先清除,再將方塊下移一個位置
for(i=FrameX+2;i
{
if(a[i][k]==1)
{
a[i][k]=0;
gotoxy(hOut,i,k);
printf(" ?");
a[i][k+1]=1;
gotoxy(hOut,i,k+1);
printf("□");
}
}
}
j++; ? //方塊下移后,重新判斷刪除行是否滿行
del_count++; //記錄刪除方塊的行數
}
}
}
}
tetris->score+=100*del_count; //每刪除一行,得100分
if( del_count>0 && ( tetris->score%1000==0 || tetris->score/1000>tetris->level-1 ) )
{ ? ? ? ?//如果得1000分即累計刪除10行,速度加快20ms并升一級
tetris->speed-=20;
tetris->level++;
}
}
5體會
1、C語言游戲程序可以看到,C語言是我們第一門編程語言,從對計算機沒有任何編程能力的菜鳥,到現在能讀懂C語言的程序,感覺自己在慢慢進步。
2、計算機應用系統,就是不斷接收用戶的輸入,然后根據相應的邏輯,顯示相應的內容的過程。
3、按照這個思路,我可以把程序修改成一個打飛機的游戲,控制飛機左右一定,就是我的飛機能不僅僅在下面跑,還可以到處跑,這個只要把我的飛機限制在21行的限制取消就可以了。
總結
以上是生活随笔為你收集整理的c语言程序设计俄罗斯方块PPT,俄罗斯方块游戏:C语言程序设计初步感受的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux与rtos有哪些区别
- 下一篇: 如何解决电脑开机出现英文字母开不了机的问