C游戏代码介绍
那么我们来详细看一下
getch()函数:我们都知道getchar(),同样可以接收键盘输入,但是会在标准输出设备上显示输入字符。但是,我们的小游戏的标准输出设备是用来显示游戏画面的,不能显示输入字符。于是我们使用了getch()函数,可以在接收键盘输入时不在标准输出设备上输出。要理解这两个函数就需要我们理解输入缓冲区。我们知道电脑程序的运行速度是极快的,我们的键盘输入不是直接传给程序的,而是暂存在缓冲区中,积累到一定的数目后再输入给程序。比如scanf函数就是在接收到回车或输入与预设不符时停止接收键盘输入并将缓冲区中的字符输入到程序中。而且scanf函数在将键盘输入存到缓冲区中的同时输入标准输出设备中。理解了以上,getch()就好理解了。gethch()函数将键盘输入存入缓冲区直接输出到程序中,而且getch()函数是接收到一个字符后马上输出的。所以程序能马上对键盘输入做出反应。
Sleep()函数:可以上程序停下来,如果太快的话人眼跟不上来的。暂停时间是以ms为单位的。其实执行Sleep()函数时电脑不是什么都不做的,其实它在循环执行空语句。如果你知道你的电脑循环执行一个空语句所需的时间的话,你可以直接操作。很多单片机就是利用这个原理实现延时的目的。
扫描方向:是需要格外注意的,因为游戏最大的特征就是交互性极强,所以游戏里的数据是实时更新的。所以如果扫描方向不对的话是很容易出问题的,大家可以把代码的扫描方向修改一下看看结果。
函数分装:大家可以看到我是把代码分装到几个不同的函数中的。无论任何游戏都可以分为以下四个部分,初始化,显示,刷新,接收玩家输入。所以将游戏天然的分为四个大块是十分合理的。
#include<stdio.h> #include<stdlib.h> #include<windows.h> #include<conio.h> #include<time.h> #define N 20 int screen[N][N]; void start(int* flag,int* rate){ srand((unsigned)time(NULL)); screen[N-1][rand() ]=2; *flag=0;//判断是否被击中,初始为零 *rate=20;敌机移动速率 } void show(){ system("cls"); printf("jk操作\n"); //输出画面 inti,j; for(i=0;i<N;i ){ for(j=0;j<N;j ){ if(screen[i][j]==1) putchar('V'); if(screen[i][j]==2) putchar('A'); else putchar(''); } putchar('\n'); } Sleep(50); } void updatewithoutinput(int* flag,int*rate){ inti,j; //计时 staticint time=-1; time ; //敌机前进 for(i=N-1;i>=0;i--){ for(j=0;j<N;j ){ if(screen[i][j]==1){ screen[i][j]=0; screen[i 1][j]=1; } //敌机触底 if(i==N-2&&screen[i][j]==1){ screen[i][j]=0; } //敌机击中战机 if(screen[i][j]==2&&screen[i-1][j]==1){ *flag=1; putchar('\a'); } //刷新敌机 if(time%*rate==0&&i==0) screen[i][j]=rand()%2; } } } void updatewithinput(){ charinput;//保存键盘输入 if(kbhit()){//检测键盘输入 input=getch(); intj; for(j=0;j<N;j ){ if(input=='j'&&j>0&&screen[N-1][j]==2){ screen[N-1][j]=0; screen[N-1][j-1]=2; } if(input=='k'&&j<N-1&&screen[N-1][j]==2){ screen[N-1][j]=0; screen[N-1][j 1]=2; break;//防止错误多步操作 } } } } int main(){ intrate; intflag; begin: start(&flag,&rate); while(1){ if(flag) gotobegin;//重启游戏 show(); updatewithoutinput(&flag,&rate); updatewithinput();
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved