嗨嗨嗨,我又写了一个新游戏;

按照惯例,上代码,别废话!



#include <iostream>
#include <unistd.h>
#include <termio.h>
#include <ctype.h>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <cstring>
using namespace std;
int mode; // 游戏模式: 1.经典模式 2.限时模式 3.无尽模式 int getch() {// 不回显的输入 struct termios nts, ots; // 得到当前终端(0表示标准输入)的设置 if (tcgetattr(0, &ots) < 0) return EOF; // 设置终端为Raw原始模式,该模式下所有的输入数据以字节为单位被处理 nts = ots; cfmakeraw(&nts); // 设置上更改之后的设置 if (tcsetattr(0, TCSANOW, &nts) < 0) return EOF; // 设置还原成老的模式 int cr; cr = getchar(); if (tcsetattr(0, TCSANOW, &ots) < 0) return EOF; return cr; } // 打印1-4数字 num数字颜色标记为color void print(int num, string color) { cout << "\033[0;0H"; if (mode == 1) cout << " ==== 经典模式 ====" << endl; if (mode == 2) cout << " ==== 限时模式 ====" << endl; if (mode == 3) cout << " ==== 无尽模式 ====" << endl; cout << " "; for (int i = 1; i <= 4; i++) { if (i == num) { if (color == "black") cout << "\033[37;40m " << i << " \033[0m"; if (color == "green") cout << "\033[37;42m " << i << " \033[0m"; if (color == "red") cout << "\033[37;41m " << i << " \033[0m"; } else { cout << "\033[30;47m " << i << " \033[0m"; } } cout << endl; } void intro() // 规则介绍 { cout << "\033c" << flush; cout << " =============================================" << endl; cout << " 测测你的手速!别踩白块!" << endl; cout << " 开始后,你需要用最快的速度按下黑色数字按键。" << endl; cout << " 游戏共有 3 种模式: 1.经典模式 2.限时模式 3.无尽模式" << endl; cout << " 1.经典模式: 在最短时间内完成25次按键任务" << endl; cout << " 2.限时模式: 在30s内完成尽可能多的按键任务" << endl; cout << " 3.无尽模式: 不限时,按错为止" << endl; cout << " 准备好了嘛?" << endl; cout << " 按下对应数字(1~3)我们就开始了~" << endl; cout << " *注意:请将输入法改为英文!" << endl; cout << " =============================================" << endl; } void game() // 游戏进程 { srand(time(0)); int right = 0; // 按键次数 int start = time(0); // 开始时间 int tme = time(0) - start; // 已用时 cout << "\033c" << flush; while (true) { // 结束游戏 1.经典模式 25次 2.限时模式 30s if (mode == 1 && right >= 25) break; if (mode == 2 && tme >= 30) break; // 生成随机数 int r = rand() % 4 + 1; print(r, "black"); // 获取按键 char ch = getch(); if (r == ch - '0') // 按键正确 { right++; print(r, "green"); usleep(100000); tme = time(0) - start; cout << " 已用时: " << tme << " s " << endl; cout << " 按键数: " << right << " 次 "<< endl; } else // 按键错误 { tme = time(0) - start; cout << "\033c" << flush; print(ch-'0', "red"); usleep(100000); cout << " ==== GAME OVER! ====" << endl; usleep(500000); break; } } // 游戏总结 cout << "\033c" << flush; cout << " ==== 总结 ====" << endl; cout << " 总用时: " << tme << " s" << endl; cout << " 按键数: " << right << " 次" << endl; cout << " 手 速: " << 1.0*right/tme << " 次/s" << endl; cout << " ==============" << endl; cout << " 按回车开始新游戏..." << endl; getchar(); } int main() { while (true) { intro(); char ch = getch(); if (ch >= '1' && ch <= '3') { mode = ch - '0'; // 设定模式 game(); } else if (ch == 27) // ESC的ascii是27 { cout << " 退出游戏!" << endl; break; } else cout << " 输入有误,请再次输入!" << endl; } return 0; }
OK,下期再见,拜拜!


本站作者已申明原创,禁止转载!

文章内容属作者个人观点,不代表本站立场,如有侵权立删。

   口袋儿题库-青少儿编程自测题库