从@小蔡编程 那里获得的灵感,原文地址:https://www.cnblogs.com/xiaocaibiancheng/p/15158997.html
那篇文章是说python写打字游戏的,本文就用C++语言写一遍。
废话少说,先上代码:
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
int score=0;
char a[5][5];
int start_time;
char temp;
int randbetween(int bottom,int top){
return rand()%(top-bottom)+bottom;
}
void refresh(){
system("cls");
printf("SCORE..%08d\n",score);
for(int i=4;i>0;i--){//向下移动
for(int j=0;j<5;j++){
a[i][j]=a[i-1][j];
}
}
for(int i=0;i<5;i++){
a[0][i]=(char)randbetween('a','z');//生成随机字符
}
for(int i=0;i<5;i++){
if(a[4][i]!='\0'){//字符到了最后一行
cout<<"GAME OVER";exit(0);
}
}
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(a[i][j]!='\0')printf("%c ",a[i][j]);
else printf(" ");
}
printf("\n");
}
}
void run(char c){
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(a[i][j]==c)a[i][j]='\0',score+=10;
}
}
system("cls");
printf("SCORE..%08d\n",score);
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(a[i][j]!='\0')printf("%c ",a[i][j]);
else printf(" ");
}
printf("\n");
}
}
int main(){
srand(time(0));
system("title game");
for(;;){
start_time=clock();
refresh();
while(clock()-start_time<=3000){//3秒以内
if(_kbhit()){
temp=getch();
run(temp);
}
}
}
/*for(;;){
cout<<(char)randbetween('a','z');
getchar();
}*/
return 0;
}
简单说下代码,
每隔一段时间需要刷新一下屏幕,刷新也就是refresh。因此我们把这些内容写进refresh函数。主要用途:
1,把每一行的元素往下移动
2,最上面一行加入随机字符,randbetween其实是模仿excel中的一个函数,基本还是调用rand标准库函数。
3,如果最下面一行有字符还没有消除,那么就game over
然后是run函数,用于消除字符。我们反复使用getch()函数进行输入字符,通过run进行判断字符是否在数组中,如果在数组中就把它消除掉。
main函数中,clock()-start_time<=3000是指和上一次刷新时间相隔3000ms,也就是3秒。这样就可以指定3秒刷新一次。
system("title game")用于把标题栏设置为game。
效果演示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucTOxETOxEDM50yN1cTMzEDM5ATOxgDMxIDMy0CNzMzM1QjMvwFOwEjMwIzLcRzMzMTN0IzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)