俄罗斯游戏软件:C语言应用初步感受
俄罗斯游戏软件: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语言应用初步感受相关推荐
- c语言小飞机游戏如何实现敌机多个输出,飞机游戏软件:C语言应用初步感受
C语言课程设以一节课,首先提供一个C语言的飞机游戏让大家感受一下,上学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统. 首先安装c-free,然后是将代码贴进去运行, 界面 ...
- c语言程序设计俄罗斯方块PPT,俄罗斯方块游戏:C语言程序设计初步感受
C语言课程设以一节课,老师提供了一个C语言的俄罗斯方块游戏让我们感受,本学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统. 首先安装c-free,然后打开老师所发给我们的小 ...
- 三星android10变化,关于从三星S10升级到S21的初步感受
关于从三星S10升级到S21的初步感受 2021-02-25 16:23:05 10点赞 0收藏 1评论 写在前面的话:第一次写这类文章,也没时间配图,差错难免,请各位多多包涵.从三星S10换到S21 ...
- 关于SQL语言的初步认识
关于SQL语言的初步认识 1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义. 2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项. 3.一个表或者是一 ...
- 小学生数学测试软件c语言流程图,小学生数学测试软件-C语言课程设计
小学生数学测试软件-C语言课程设计 C语言课程设计 设计期限 2013 年 6 月 17 开始 至 2013 年 6 月 20 结束 系 别 信息管理与信息系统 专 业 班级 学生姓名 学号 指导教师 ...
- 【Java】Java 语言的初步认识及工作应用范围
Java 语言的初步认识 什么是程序 在Java 语言学习前,首先我需要知道,什么是 程序 ! 程序就是一组(系列)命令.首先,执行第一个命令,然后执行第二个命令,然后执行第三个命令,依此类推.执行完 ...
- keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理.doc...
Keil软件"C语言"与"汇编"混编 相关知识整理 用Keil在C中嵌入汇编1 在Keil中嵌入汇编2 介绍直接嵌入汇编代码的方法4 采用汇编可能会有的好处5 ...
- 一起学习C语言:初步进入编程世界(三)
上一篇<一起学习C语言:初步进入编程世界(二)>中,我们了解了C语言的加法运算方式和赋值运算符的用法,并通过printf函数成功输出计算结果.私下我们可以参考赋值运算表,练习更多的运算符用 ...
- 宿舍管理程序c语言,学生宿舍管理软件C语言源代码完整版
<学生宿舍管理软件C语言源代码完整版>由会员分享,可在线阅读,更多相关<学生宿舍管理软件C语言源代码完整版(8页珍藏版)>请在人人文库网上搜索. 1.源程序代码:#includ ...
最新文章
- libvirt(virsh命令介绍)
- 【Spring框架家族】Spring Cloud Eureka 之常用配置解析(转载)
- 理解HTTP协议中的multipart/form-data
- 【转】ABP源码分析四十六:ABP ZERO中的Ldap模块
- Unix domain socket IPC
- 计算机一级win7操作题,计算机等级考试一级WIN7操作题.docx
- 网上购物系统功能业务逻辑导图_功能流程说明_OctShop
- 连接宽带提示服务器无响应,宽带拨号上网服务器无响应是怎么回事
- 计算机软件如何永久删除,电脑上如何卸载软件? 如何从电脑上彻底删除一个软件?...
- 头文件中extern “C”的理解
- Linux可以打开cdr文件吗,CDR是什么格式
- 16. Segmentation
- 用Python爬取28010条《隐秘的角落》评论,我发现了这些...
- ic卡信息保存在服务器,智能IC卡网络数据安全保密系统
- os 通过pptt table得到cache信息
- 推荐四款自用的电脑神器
- APP性能测试--帧率测试
- 《Qt 学习之路 2》
- 金海佳学C++primer 练习9.47
- 【系统分析师之路】第十七章 多媒体基础知识(章节重点)