俄罗斯游戏软件:C语言应用初步感受

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

首先安装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、实现俄罗斯方块的移动

个人感觉这个程序最吸引人的地方,就是每个方块都可以变化方向,位置,和平时在游戏机中玩得几乎完全一样,感觉十分的神奇,通过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、计算机应用系统,就是不断接收用户的输入,然后根据相应的逻辑,显示相应的内容的过程。

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;

}

}

转载于:https://blog.51cto.com/10973602/1789483

俄罗斯游戏软件:C语言应用初步感受相关推荐

  1. c语言小飞机游戏如何实现敌机多个输出,飞机游戏软件:C语言应用初步感受

    C语言课程设以一节课,首先提供一个C语言的飞机游戏让大家感受一下,上学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统. 首先安装c-free,然后是将代码贴进去运行, 界面 ...

  2. c语言程序设计俄罗斯方块PPT,俄罗斯方块游戏:C语言程序设计初步感受

    C语言课程设以一节课,老师提供了一个C语言的俄罗斯方块游戏让我们感受,本学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统. 首先安装c-free,然后打开老师所发给我们的小 ...

  3. 三星android10变化,关于从三星S10升级到S21的初步感受

    关于从三星S10升级到S21的初步感受 2021-02-25 16:23:05 10点赞 0收藏 1评论 写在前面的话:第一次写这类文章,也没时间配图,差错难免,请各位多多包涵.从三星S10换到S21 ...

  4. 关于SQL语言的初步认识

    关于SQL语言的初步认识 1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义. 2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项. 3.一个表或者是一 ...

  5. 小学生数学测试软件c语言流程图,小学生数学测试软件-C语言课程设计

    小学生数学测试软件-C语言课程设计 C语言课程设计 设计期限 2013 年 6 月 17 开始 至 2013 年 6 月 20 结束 系 别 信息管理与信息系统 专 业 班级 学生姓名 学号 指导教师 ...

  6. 【Java】Java 语言的初步认识及工作应用范围

    Java 语言的初步认识 什么是程序 在Java 语言学习前,首先我需要知道,什么是 程序 ! 程序就是一组(系列)命令.首先,执行第一个命令,然后执行第二个命令,然后执行第三个命令,依此类推.执行完 ...

  7. keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理.doc...

    Keil软件"C语言"与"汇编"混编 相关知识整理 用Keil在C中嵌入汇编1 在Keil中嵌入汇编2 介绍直接嵌入汇编代码的方法4 采用汇编可能会有的好处5 ...

  8. 一起学习C语言:初步进入编程世界(三)

    上一篇<一起学习C语言:初步进入编程世界(二)>中,我们了解了C语言的加法运算方式和赋值运算符的用法,并通过printf函数成功输出计算结果.私下我们可以参考赋值运算表,练习更多的运算符用 ...

  9. 宿舍管理程序c语言,学生宿舍管理软件C语言源代码完整版

    <学生宿舍管理软件C语言源代码完整版>由会员分享,可在线阅读,更多相关<学生宿舍管理软件C语言源代码完整版(8页珍藏版)>请在人人文库网上搜索. 1.源程序代码:#includ ...

最新文章

  1. libvirt(virsh命令介绍)
  2. 【Spring框架家族】Spring Cloud Eureka 之常用配置解析(转载)
  3. 理解HTTP协议中的multipart/form-data
  4. 【转】ABP源码分析四十六:ABP ZERO中的Ldap模块
  5. Unix domain socket IPC
  6. 计算机一级win7操作题,计算机等级考试一级WIN7操作题.docx
  7. 网上购物系统功能业务逻辑导图_功能流程说明_OctShop
  8. 连接宽带提示服务器无响应,宽带拨号上网服务器无响应是怎么回事
  9. 计算机软件如何永久删除,电脑上如何卸载软件? 如何从电脑上彻底删除一个软件?...
  10. 头文件中extern “C”的理解
  11. Linux可以打开cdr文件吗,CDR是什么格式
  12. 16. Segmentation
  13. 用Python爬取28010条《隐秘的角落》评论,我发现了这些...
  14. ic卡信息保存在服务器,智能IC卡网络数据安全保密系统
  15. os 通过pptt table得到cache信息
  16. 推荐四款自用的电脑神器
  17. APP性能测试--帧率测试
  18. 《Qt 学习之路 2》
  19. 金海佳学C++primer 练习9.47
  20. 【系统分析师之路】第十七章 多媒体基础知识(章节重点)

热门文章

  1. MATLAB中调用Weka设置方法(转)及示例
  2. 「十二省联考 2019」皮配——dp
  3. [IoC容器Unity]第三回:依赖注入
  4. C# 多线程及同步简介示例
  5. Win10 + Python + MXNet + VS2015配置
  6. Web测试容易忽略的地方
  7. 使用junit测试用例
  8. R--线性回归诊断(一)
  9. 动态内存分配及变量存储类别(第二部分)
  10. CACTI 0.87e 安装