C语言课程设以一节课,老师提供了一个C语言的飞俄罗斯方块让我们感受,我们所学的C语言课程,主要是各种语句的练习,这次是用我们所学过的知识来感受一个实际的系统。

  首先安装c-free,然后是将代码贴进去运行

俄罗斯方块和贪吃蛇游戏软件:C语言应用初始感受_贪吃蛇

界面虽然有点简单,但这确实使用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、实现俄罗斯方块的移动

 个人感觉这个程序最吸引人的地方,就是每个方块都可以变化方向,位置,和平时在游戏机中玩得几乎完全一样,感觉十分的神奇,通过c语言程序的设计,可以完成这样一个游戏,真的令人大吃一惊,真的是简单的语言,可以实现复杂的功能。

其他就是参数设置,已经不是软件的重点了,但是在其中,学习了一个常用的C语言实现的菜单,

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语言是我们第一门编程语言,从对计算机没有任何编程能力的菜鸟,到现在能读懂C语言的程序,感觉自己在慢慢进步。

2、计算机应用系统,就是不断接收用户的输入,然后根据相应的逻辑,显示相应的内容的过程。