俄罗斯游戏软件:C语言应用初步感受
俄羅斯游戲軟件:C語言應用初步感受
?
C語言課程設以一節(jié)課,老師提供了一個C語言的飛俄羅斯方塊讓我們感受,我們所學的C語言課程,主要是各種語句的練習,這次是用我們所學過的知識來感受一個實際的系統(tǒng)。
? 首先安裝c-free,然后是將代碼貼進去運行
界面雖然有點簡單,但這確實使用C語言做出來的游戲。
分析一下程序,感覺沒有太復雜的,就是上學期學習的簡單語句的組合,但是用的非常好。首先看看用到了幾種語句:
1、首先是在屏幕上顯示的語句printf,
2、另外一個就是多條件判斷switch--case
應用方法
?switch(tetris->flag) ? ? ?
?{
? 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: ? ? ? ??
? ?{ ?
? ? 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: ? ? ? ??
? ?{ ?
? ? 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: ? ? ? ??
? ?{ ?
? ? 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: ? ? ? ??
? ?{ ?
? ? 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: ? ? ? ??
? ?{ ?
? ? 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: ? ? ? ??
? ?{ ?
? ? 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: ? ? ? ?
? ?{ ?
? ? 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: ? ? ? ?
? ?{ ?
? ? 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: ? ? ??
? ?{ ?
? ? 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: ? ? ??
? ?{ ?
? ? 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: ? ? ? ?
? ?{ ?
? ? 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: ? ? ??
? ?{
? ? 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: ? ? ??
? ?{?
? ? 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: ? ? ? ?
? ?{?
? ? 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: ? ? ? ?
? ?{ ?
? ? 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: ? ? ??
? ?{ ?
? ? 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;
? ?}
?}?
}
用來控制左右移動和進入菜單,
3、游戲窗口的定義
void make_frame()
{
?HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); ?
?gotoxy(hOut,FrameX+Frame_width-5,FrameY-2); ?
?printf("俄羅斯方塊");
?gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7); ?
?printf("**********下一個方塊:");
?gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);
?printf("**********");
?gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);
?printf("↑鍵:變體");
?gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);
?printf("空格:暫停游戲");
?gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);
?printf("Esc :退出游戲");
?gotoxy(hOut,FrameX,FrameY); ? ? ??
?printf("╔");
?gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);
?printf("╗");
?gotoxy(hOut,FrameX,FrameY+Frame_height);
?printf("╚");
?gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);
?printf("╝");
?a[FrameX][FrameY+Frame_height]=2; ? ??
?a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;
?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<Frame_height;i++)
?{
? gotoxy(hOut,FrameX,FrameY+i);?
? printf("║"); ? ? ? ??
? a[FrameX][FrameY+i]=2; ? ? ??
?}
?for(i=1;i<Frame_height;i++)
?{
? gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);?
? printf("║"); ? ? ? ??
? a[FrameX+2*Frame_width-2][FrameY+i]=2; ?
?}
}
4、光標移動位置
void gotoxy(HANDLE hOut, int x, int y)
{
?COORD pos;
?pos.X = x; ?
?pos.Y = y; ?
?SetConsoleCursorPosition(hOut, pos);
}
5、實現(xiàn)俄羅斯方塊的移動
?個人感覺這個程序最吸引人的地方,就是每個方塊都可以變化方向,位置,和平時在游戲機中玩得幾乎完全一樣,感覺十分的神奇,通過c語言程序的設計,可以完成這樣一個游戲,真的令人大吃一驚,真的是簡單的語言,可以實現(xiàn)復雜的功能。
其他就是參數(shù)設置,已經(jīng)不是軟件的重點了,但是在其中,學習了一個常用的C語言實現(xiàn)的菜單,
void gotoxy(HANDLE hOut, int x, int y);
void make_frame();
void get_flag(struct Tetris *);
void make_tetris(struct Tetris *);
void print_tetris(HANDLE hOut,struct Tetris *);
void clear_tetris(HANDLE hOut,struct Tetris *);
int if_moveable(struct Tetris *);
void del_full(HANDLE hOut,struct Tetris *);
void start_game();
?
?
體會:
1、C語言游戲程序可以看到,C語言是我們第一門編程語言,從對計算機沒有任何編程能力的菜鳥,到現(xiàn)在能讀懂C語言的程序,感覺自己在慢慢進步。
2、計算機應用系統(tǒng),就是不斷接收用戶的輸入,然后根據(jù)相應的邏輯,顯示相應的內(nèi)容的過程。
3、按照這個思路,我可以把程序修改成一個貪吃蛇的游戲,控制蛇的左右。
?
例如:由此改編的貪吃蛇程序
#include<stdio.h>
#include<time.h>
#include<conio.h>
#include<stdlib.h>
int head=3,tail=0,f=0,s,t,m;
int main()
{ int i,j;
int zuobiao[2][80];
long start;
int direction=77;
int gamespeed;
int timeover;
int change(char qipan[30][80],int zuobiao[2][80],char direction);
printf("auto? Y/N\n");
m=getch();
if (m=='y')
{ zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4;
/*處理棋盤*/
char qipan[20][80];//定義棋盤
for(i=0;i<=19;i++) ?? ?
for(j=0;j<=79;j++)
qipan[i][j]=' ';
qipan[1][1]=qipan[1][2]=qipan[1][3]='*';
qipan[1][4]='#';
printf("start\n");
printf("Input your game level,please.\ 1-1000\n");
scanf("%d",&gamespeed);
s=rand()%20;
t=rand()%80;
qipan[s][t]='$';
while(direction!='q')
{ system("cls");
for(i=0;i<20;i++)
for(j=0;j<80;j++)
printf("%c",qipan[i][j]);
timeover=1;
start=clock();
while(!kbhit()&&(timeover=clock()-start<=1000-gamespeed));
if(direction==72||direction==80)
if(s!=zuobiao[0][head])
if(s-zuobiao[0][head]<0)
direction=72;
else direction=80;
else?
if(t-zuobiao[1][head]<0)
direction=75;
else direction=77;
else if(t!=zuobiao[1][head])
if(t-zuobiao[1][head]<0)
direction=75;
else direction=77;
else?
if(t-zuobiao[1][head]<0)
direction=72;
else direction=80;
if(!(direction==72||direction==80||direction==75||direction==77))
{
return 0;
system("cls");
printf("GAME OVER!\n");
}
if(!change(qipan,zuobiao,direction))
{
direction='q';
system("cls");
printf("GAME OVER!\n");
}
if(f==1)
{
s=rand()%20;
t=rand()%80;
qipan[s][t]='$';
f=0;
}
}
return 0;
}
else? zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4;
char qipan[20][80];
for(i=0;i<20;i++) ?? ?
for(j=0;j<80;j++)
qipan[i][j]=' ';
for(i=0;i<80;i++)
qipan[0][i]='_';
for(i=1;i<=20;i++)
qipan[i][0]='|';
for(i=1;i<=20;i++)
qipan[i][79]='|';
for(i=0;i<80;i++)
qipan[19][i]='_';
qipan[1][1]=qipan[1][2]=qipan[1][3]='*';
qipan[1][4]='#';
printf("start\n");
printf("Input your game level,please.\ 1-1000\n");
scanf("%d",&gamespeed);
s=rand()%20;
t=rand()%80;
qipan[s][t]='$';
while(direction!='q')
{ system("cls");
for(i=0;i<20;i++)
for(j=0;j<80;j++)
printf("%c",qipan[i][j]);
timeover=1;
start=clock();
while(!kbhit()&&(timeover=clock()-start<=1000-gamespeed));
if(timeover)
{
getch();
direction=getch();
}
else
direction=direction;
if(!(direction==72||direction==80||direction==75||direction==77))
{
return 0;
system("cls");
printf("GAME OVER!\n");
}
if(!change(qipan,zuobiao,direction))
{
direction='q';
system("cls");
printf("GAME OVER!\n");
}
if(f==1)
{
s=rand()%20;
t=rand()%80;
qipan[s][t]='$';
f=0;
}
}
return 0;
}
?
?
int change(char qipan[20][80],int zuobiao[2][80],char direction)
{
int x,y;
{if(direction==72)
{x=zuobiao[0][head]-1;
y=zuobiao[1][head]; }
if(direction==80)
{x=zuobiao[0][head]+1;
y=zuobiao[1][head];}
if(direction==75)
{x=zuobiao[0][head];
y=zuobiao[1][head]-1;}
if(direction==77)
{x=zuobiao[0][head];
y=zuobiao[1][head]+1;}
if(x<0)
x=18;
else if(x>18)
x=0;
else if(y>78)
y=0;
else if(y<0)
y=78;
if(qipan[s][t]!='$')
f=1;
qipan[zuobiao[0][tail]][zuobiao[1][tail]]=' ';
tail=(tail+1)%80;
qipan[zuobiao[0][head]][zuobiao[1][head]]='*';
head=(head+1)%80;
zuobiao[0][head]=x;
zuobiao[1][head]=y;
qipan[zuobiao[0][head]][zuobiao[1][head]]='#';
return 1;
}
}
?
轉(zhuǎn)載于:https://blog.51cto.com/10973602/1789483
總結(jié)
以上是生活随笔為你收集整理的俄罗斯游戏软件:C语言应用初步感受的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】使用Apache Kylin搭建企
- 下一篇: 微型计算机原理考试试卷,微机原理与应用试