游戏开发日志支线7
2026-04-27 12:19:53
发布于:香港
接上回
游戏:Typing Game
更新版本:0.6 (半成品)
代码:李伙子ia
美术:也没美术啊
翻译:Artificial Intelligence
团队:新手团
//TypingGame0.6
//How to found? Goto https://www.acgo.cn/person/4913066
static constexpr char GAME_NAME[]="TypingGame";
static constexpr char VERSION[]="0.6";
static constexpr char CODER[]={-89,-11,-91,-21,-92,108,105,97,0};
static constexpr char ARTIST[]={-88,83,-90,-77,0};
static constexpr char ENGLISH_TRANSLATOR[]={-92,72,-92,117,-76,-68,-81,-32,0};
static constexpr char LAST_UPDATE_DATE[]="2026/4/19";
static constexpr char AUTHOR_HOMEPAGE[]="https://www.acgo.cn/person/4913066";
static constexpr char TIMING_UNIT='s';
static constexpr char LANGUAGE='c';
#ifdef _WIN32
#include<conio.h>
#else
#include<termios.h>
#include<unistd.h>
#include<cstdio>
char _getch(void){
termios old_tc;
tcgetattr(STDIN_FILENO,&old_tc);
termios new_tc=old_tc;
new_tc.c_lflag&=~(ICANON|ECHO);
new_tc.c_cc[VMIN]=1;
new_tc.c_cc[VTIME]=0;
tcsetattr(STDIN_FILENO,TCSANOW,&new_tc);
char chr=getchar();
tcsetattr(STDIN_FILENO,TCSANOW,&old_tc);
return chr;
}
#endif
#include<cstdint>
#include<chrono>
#include<string>
#include<vector>
#include<iostream>
void clear(){
#ifdef _WIN32
system("cls");
#else
system("clear");
#endif
}
char timing_unit=TIMING_UNIT,language=LANGUAGE;
int32_t type_word_cnt=0,pass_level_cnt=0;
std::vector<std::vector<std::string>> levels={
{"Typing Game"},
{"abcdefg hijklmn opqrstu vwxyz"},
{"A big cat dances elegantly fine grass"},
{"Here is just kind lovely moment"},
{"Old pure quiet rain sings true unity"},
{"Vast wild xeriscape yields zest"},
{"!_! @_@ #v# $U$ %v% ^v^ &v& *v* (-_-)"},
{"`v` -std=c++20 [[maybe_unused]] {-_-} ;) :( '_' \"v\" [>_] >v< \\v/ ?v? ||-_-"},
};
const int32_t L=1,R=levels.size()-1;
std::vector<std::vector<std::string>> _levels_={
{"Typing Game"},
{
"cpp\r",
"#include<iostream>\r",
"using namespace std;\r",
"int main(){\r",
"\tcout<<\"Hello World!\"<<endl;\r",
"\treturn 0;\r",
"}\r"
},
{
"py\r",
"# -*- coding: utf-8 -*-\r",
"#welcome message\r",
"def welcome_message():\r",
"\tprint(\"************************\")\r",
"\tprint(\"* *\")\r",
"\tprint(\"* Welcome to Typing! *\")\r",
"\tprint(\"* *\")\r",
"\tprint(\"************************\")\r",
"if __name__==\"__main__\":\r",
"\twelcome_message()\r"
},
{
"java\r",
"public class HelloWorld{\r",
"\tpublic static void main(String[] args){\r",
"\t\tSystem.out.printIn(\"Hello World!\");\r",
"\t}\r",
"}\r"
},
{
"pi=3.\r",
"1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132\r",
"8230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847\r",
"5648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962822\r",
"5409917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185\r",
"4807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277\r",
"0539217176293176752346748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465\r",
"4958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973\r",
"1732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147\r",
"3035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572\r",
"0106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595\r",
}
};
const int32_t _L_=1,_R_=_levels_.size()-1;
std::vector<std::vector<std::string>> my_levels={
{"Typing Game"},
};
int32_t my_L=0,my_R=0;
int32_t typing_level(int32_t level_index,uint8_t mod){
if(
(mod==0&&(level_index>R))||
(mod==1&&(level_index>_R_))||
(mod==2&&(level_index>my_R))
) return -1;
int32_t wrong_cnt=0;
const std::vector<std::string>& level=(
mod==0? levels.at(level_index):
mod==1?_levels_.at(level_index): my_levels.at(level_index)
);
const std::vector<std::string>::size_type level_length=level.size();
for(std::vector<std::string>::size_type index=0;index<level_length;index++){
const std::string& level_str=level.at(index);
std::string::size_type strlen=level_str.size(),backspace=0;
for(std::string::size_type start=0;start<strlen;start++,backspace++){
int chr=level_str.at(start);
if(chr=='\r') std::cout<<" [Enter]",backspace+=7;
if(chr=='\t') std::cout<<"Tab]",backspace+=3;
else std::cout.put(chr);
}
std::cout<<std::string(backspace,'\b')<<std::flush;
for(std::string::size_type jndex=0;jndex<strlen;){
int chr=level_str.at(jndex),key=_getch();
if(key==27) return -27;
if((key!=13&&key!=9&&key!=8)&&((key>=0&&key<=31)||key==127)) continue;
if(key=='\b'){
if(!jndex) continue;
int last_chr=level_str.at(--jndex);
if(last_chr=='\r') std::cout<<std::string(8,'\b')<<" [Enter]"<<std::string(8,'\b');
else if(last_chr=='\t') std::cout<<std::string(4,'\b')<<"Tab]"<<std::string(4,'\b');
else std::cout.put('\b').put(last_chr).put('\b');
continue;
}
else if(key==chr||(key=='\n'&&chr=='\r')){
if(key=='\r'||key=='\n') std::cout<<"\033[42;37m [Enter]\033[0m";
else if(key=='\t') std::cout<<"\033[42;37mTab]\033[0m";
else std::cout<<"\033[42;37m"<<static_cast<char>(chr)<<"\033[0m";
}
else{
if(chr=='\r') std::cout<<"\033[41;37m [Enter]\033[0m";
else if(chr=='\t') std::cout<<"\033[41;37mTab]\033[0m";
std::cout<<"\033[41;37m"<<static_cast<char>(chr)<<"\033[0m",wrong_cnt++;
}
jndex++,type_word_cnt++;
}
std::cout.put('\n');
}
return wrong_cnt;
}
int main(){
int32_t main_menu_key,game_setting_key;
std::string name="s001";
auto main_start=std::chrono::high_resolution_clock::now();
#ifdef _WIN32
system(((std::string)"title "+GAME_NAME+VERSION).c_str());
#else
std::cout<<(std::string)"\033]0;"+GAME_NAME+VERSION+"\007";
#endif
// if(language=='c'){
// std::cout<<(std::string){-89,65,-91,115,-92,-80,-69,-14,-90,87,-90,114};
// std::cout<<"? "<<'\n';
// std::cout<<(std::string){-89,65,-86,-70,-90,94,-75,-86};
// std::cout<<": ";
// }else{
// std::cout<<"What is your name? "<<'\n';
// std::cout<<"Your answer: ";
// }
// std::cout.flush();
// std::getline(std::cin,name);
// clear();
while(1){
if(language=='c'){
std::cout<<"ID: 001"<<'\n';
std::cout<<(std::string){-90,87,-90,114}<<": "<<name<<'\n';
std::cout<<(std::string){-91,68,-75,-26,-77,-26}<<'\n';
std::cout<<(std::string){-85,-10,91,-86,-59,-82,-26,93,-74,125,-87,108,-76,-27,-64,-72}<<'\n';
std::cout<<(std::string){-85,-10,39,120,39,-74,105,-92,74,-90,97,-70,-69,-68,-46,-90,-95}<<'\n';
std::cout<<(std::string){-85,-10,91,69,115,99,93,-80,104,-91,88,-76,-27,-64,-72}<<'\n';
std::cout<<(std::string){-85,-10,39,115,39,-92,-63,-76,-85,-76,-27,-64,-72,-77,93,-72,109}<<'\n';
// std::cout<<(std::string){-85,-10,39,99,39,-74,105,-92,74,-90,-37,-87,119,-72,113,-68,-46,-90,-95}<<'\n';
}else{
std::cout<<"ID: 001"<<'\n';
std::cout<<"Name: "<<name<<'\n';
std::cout<<"Main Menu"<<'\n';
std::cout<<"Press [space] start the game"<<'\n';
std::cout<<"Press 'x' go to hell mode"<<'\n';
std::cout<<"Press [Esc] exit the game"<<'\n';
std::cout<<"Press 's' change game settings"<<'\n';
// std::cout<<"Press 'c' go to custom mode"<<'\n';
}
main_menu_key=_getch();
clear();
switch(main_menu_key){
case ' ':{
if(language=='c'){
std::cout<<(std::string){-67,-48,-65,-17,-66,-36,-92,64,-83,-45,-61,-10,-91,100}<<'\n';
std::cout<<(std::string){-78,-60}<<L<<"~"<<R<<(std::string){-61,-10}<<'\n';
}else{
std::cout<<"Please choose a level"<<'\n';
std::cout<<"Level "<<L<<"~"<<R<<": ";
}
int32_t level;
std::cin>>level;
clear();
if(language=='c') std::cout<<(std::string){-78,-60}<<level<<(std::string){-61,-10}<<'\n';
else std::cout<<"level "<<level<<'\n';
auto start=std::chrono::high_resolution_clock::now();
int32_t wrong=typing_level(level,0);
auto end=std::chrono::high_resolution_clock::now();
if(wrong==-27){
clear();
break;
}
if(wrong==-1){
if(language=='c'){
std::cout<<(std::string){-89,-28,-92,-93,-88,-20,-90,-71,-61,-10,-91,100}<<'\n';
}
else std::cout<<"Level cannot be find it"<<'\n';
}
else{
if(language=='c'){
std::cout<<(std::string){-82,-91,-77,-33,-79,122,-77,113,-71,76,-61,-10,-91,100,33}<<'\n';
}
else std::cout<<'\n'<<"Congratulation on pass the level!"<<'\n';
int64_t use_time;
if(timing_unit=='s'){
use_time=
std::chrono::duration_cast<std::chrono::seconds>(end-start).count();
}else if(timing_unit=='m'){
use_time=
std::chrono::duration_cast<std::chrono::milliseconds>(end-start).count();
}else if(timing_unit=='u'){
use_time=
std::chrono::duration_cast<std::chrono::microseconds>(end-start).count();
}else if(timing_unit=='n'){
use_time=
std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count();
}else{
use_time=
std::chrono::duration_cast<std::chrono::seconds>(end-start).count();
}
if(language=='c'){
std::cout<<(std::string){-88,-49,-91,-50,-82,-55,-74,-95,58,32}<<
use_time<<timing_unit<<(std::string){44,32,-65,-7,-90,114,58,32}<<wrong<<'\n';
}
else
std::cout<<"Used time: "<<use_time<<timing_unit<<", Wrong words: "<<wrong<<'\n';
pass_level_cnt++;
}
if(language=='c'){
std::cout<<(std::string){
-85,-10,-91,-12,-73,78,-85,-10,-63,-28,-60,126,-60,-14,32,46,32,46,32,46,32
};
}
else std::cout<<"Press any keys to contiune . . . ";
_getch();
clear();
break;
}
case 'X':
case 'x':{
if(language=='c'){
std::cout<<(std::string){-67,-48,-65,-17,-66,-36,-92,64,-83,-45,-61,-10,-91,100}<<'\n';
std::cout<<(std::string){-78,-60}<<_L_<<"~"<<_R_<<(std::string){-61,-10}<<'\n';
}else{
std::cout<<"Please choose a level"<<'\n';
std::cout<<"Level "<<_L_<<"~"<<_R_<<": ";
}
int32_t _level_;
std::cin>>_level_;
clear();
if(language=='c') std::cout<<(std::string){-78,-60}<<_level_<<(std::string){-61,-10}<<'\n';
else std::cout<<"level "<<_level_<<'\n';
auto _start_=std::chrono::high_resolution_clock::now();
int32_t _wrong_=typing_level(_level_,1);
auto _end_=std::chrono::high_resolution_clock::now();
if(_wrong_==-27){
clear();
break;
}
if(_wrong_==-1){
if(language=='c') std::cout<<(std::string){
-89,-28,-92,-93,-88,-20,-90,-71,-61,-10,-91,100
}<<'\n';
else std::cout<<"Level cannot be find it"<<'\n';
}
else{
if(language=='c') std::cout<<(std::string){
-82,-91,-77,-33,-79,122,-77,113,-71,76,-61,-10,-91,100,33
}<<'\n';
else std::cout<<'\n'<<"Congratulation on pass the level!"<<'\n';
int64_t _use_time_;
if(timing_unit=='s'){
_use_time_=
std::chrono::duration_cast<std::chrono::seconds>(_end_-_start_).count();
}else if(timing_unit=='m'){
_use_time_=
std::chrono::duration_cast<std::chrono::milliseconds>(_end_-_start_).count();
}else if(timing_unit=='u'){
_use_time_=
std::chrono::duration_cast<std::chrono::microseconds>(_end_-_start_).count();
}else if(timing_unit=='n'){
_use_time_=
std::chrono::duration_cast<std::chrono::nanoseconds>(_end_-_start_).count();
}else{
_use_time_=
std::chrono::duration_cast<std::chrono::seconds>(_end_-_start_).count();
}
if(language=='c') std::cout<<(std::string){-88,-49,-91,-50,-82,-55,-74,-95,58,32}<<
_use_time_<<timing_unit<<
(std::string){44,32,-65,-7,-90,114,58,32}<<_wrong_<<'\n';
else std::cout<<"Used time: "<<
_use_time_<<timing_unit<<", Wrong words: "<<_wrong_<<'\n';
pass_level_cnt++;
}
if(language=='c') std::cout<<(std::string){
-85,-10,-91,-12,-73,78,-85,-10,-63,-28,-60,126,-60,-14,32,46,32,46,32,46,32
};
else std::cout<<"Press any keys to contiune . . . ";
_getch();
clear();
break;
}
case 'S':
case 's':{
if(language=='c'){
std::cout<<(std::string){-76,-27,-64,-72,-77,93,-72,109}<<'\n';
std::cout<<(std::string){-86,-87,-91,-69,58,32}<<VERSION<<'\n';
std::cout<<(std::string){-69,115,-89,64,-90,87,-77,-26}<<'\n';
std::cout<<(std::string){-91,78,-67,88,58,32}<<CODER<<'\n';
std::cout<<(std::string){-84,-4,-77,78,58,32}<<ARTIST<<'\n';
std::cout<<(std::string){-83,94,-92,-27,-86,-87,-62,-67,-60,-74,58,32}<<ENGLISH_TRANSLATOR<<'\n';
std::cout<<(std::string){-89,64,-86,-52,-91,68,-83,-74,58,32}<<AUTHOR_HOMEPAGE<<'\n';
std::cout.put('\n');
std::cout<<(std::string){-92,-63,-76,-85,-77,93,-72,109}<<'\n';
std::cout<<(std::string){-85,-10,39,116,39,-92,-63,-76,-85,-83,112,-82,-55,-77,-26,-90,-20}<<'\n';
std::cout<<(std::string){-85,-10,39,108,39,-92,-63,-76,-85,-69,121,-88,-91}<<'\n';
std::cout<<(std::string){-85,-10,39,104,39,-74,105,-92,74,-89,64,-86,-52,-91,68,-83,-74}<<'\n';
std::cout<<(std::string){-85,-10,91,69,115,99,93,-80,104,-91,88,-83,-74,-83,-79}<<'\n';
std::cout.put('\n');
std::cout<<(std::string){-90,-88,-76,78}<<'\n';
std::cout<<(std::string){-91,-76,-90,114,-90,114,-68,-58,58,32}<<type_word_cnt<<'\n';
std::cout<<(std::string){-77,113,-71,76,-61,-10,-91,100,58,32}<<pass_level_cnt<<'\n';
}else{
std::cout<<"Game Settings"<<'\n';
std::cout<<"Version: "<<VERSION<<'\n';
std::cout<<"Credits"<<'\n';
std::cout<<"Coder: "<<CODER<<'\n';
std::cout<<"Artist: None"<<'\n';
std::cout<<"English translator: Artificial Intelligence"<<'\n';
std::cout<<"Author homepage: "<<AUTHOR_HOMEPAGE<<'\n';
std::cout.put('\n');
std::cout<<"Change setting"<<'\n';
std::cout<<"Press 't' change the timing unit"<<'\n';
std::cout<<"Press 'l' change the language"<<'\n';
std::cout<<"Press 'h' go to author homepage"<<'\n';
std::cout<<"Press [Esc] exit the game setting"<<'\n';
std::cout.put('\n');
std::cout<<"Suffer"<<'\n';
std::cout<<"Typed Words: "<<type_word_cnt<<'\n';
std::cout<<"Passed Levels: "<<pass_level_cnt<<'\n';
}
game_setting_key=_getch();
clear();
switch(game_setting_key){
case 'T':
case 't':{
if(language=='c'){
std::cout<<(std::string){
-88,-49,-91,-50,-86,-70,-83,112,-82,-55,-77,-26,-90,-20,58,32
}<<timing_unit<<'\n';
std::cout<<(std::string){-91,105,-77,93,-72,109,-86,-70,-77,-26,-90,-20}<<'\n';
std::cout<<(std::string){45,32,115,58,32,-84,-19}<<'\n';
std::cout<<(std::string){
45,32,109,58,32,-78,64,-84,-19,32,40,49,47,49,44,48,48,48,-84,-19,41
}<<'\n';
std::cout<<(std::string){
45,32,117,58,32,-73,76,-84,-19,32,40,
49,47,49,44,48,48,48,44,48,48,48,-84,-19,41
}<<'\n';
std::cout<<(std::string){
45,32,110,58,32,-81,-57,-84,-19,32,40,49,47,
49,44,48,48,48,44,48,48,48,44,48,48,48,-84,-19,41
}<<'\n';
std::cout<<(std::string){-92,-63,-76,-85,-90,-88};
}else{
std::cout<<"Using timing unit: "<<timing_unit<<'\n';
std::cout<<"Support units"<<'\n';
std::cout<<"- s: second"<<'\n';
std::cout<<"- m: millisecond (1/1,000s)"<<'\n';
std::cout<<"- u: microsecond (1/1,000,000s)"<<'\n';
std::cout<<"- n: nanosecond (1/1,000,000,000s)"<<'\n';
std::cout<<"Change to";
}
std::cout<<" (s, m, u, n) . . . ";
do{
timing_unit=_getch();
if(timing_unit=='s'||
timing_unit=='m'||
timing_unit=='u'||
timing_unit=='n'
) break;
}while(timing_unit!='s'||
timing_unit!='m'||
timing_unit!='u'||
timing_unit!='n'
);
std::cout.put('\n');
if(language=='c'){
std::cout<<(std::string){-77,93,-72,109,-90,-88,-91,92,33}<<'\n';
std::cout<<(std::string){
-85,-10,-91,-12,-73,78,-85,-10,-63,-28,-60,126,-60,-14,32,46,32,46,32,46,32
};
}else{
std::cout<<"Setting saved!"<<'\n';
std::cout<<"Press any keys to contiune . . . ";
}
_getch();
clear();
break;
}
case 'L':
case 'l':{
if(language=='c') std::cout<<(std::string){-69,121,-88,-91,-77,93,-72,109}<<'\n';
else std::cout<<"Language setting"<<'\n';
std::cout<<(std::string){45,32,99,58,32,-63,99,-59,-23,-92,-92,-92,-27}<<'\n';
std::cout<<"- e: English"<<'\n';
if(language=='c') std::cout<<(std::string){-92,-63,-76,-85,-90,-88};
else std::cout<<"Change to";
std::cout<<" (c, e) . . . ";
do{
language=_getch();
if(language=='c'||language=='e') break;
}while(language!='c'||language!='e');
std::cout.put('\n');
if(language=='c'){
std::cout<<(std::string){-77,93,-72,109,-90,-88,-91,92,33}<<'\n';
std::cout<<(std::string){
-85,-10,-91,-12,-73,78,-85,-10,-63,-28,-60,126,-60,-14,32,46,32,46,32,46,32
};
}else{
std::cout<<"Setting saved!"<<'\n';
std::cout<<"Press any keys to contiune . . . ";
}
_getch();
clear();
break;
}
case 'H':
case 'h':{
#ifdef _WIN32
system(((std::string)"start "+AUTHOR_HOMEPAGE).c_str());
#else
system(((std::string)"xdg-open "+AUTHOR_HOMEPAGE).c_str());
#endif
if(language=='c') std::cout<<(std::string){
-85,-10,-91,-12,-73,78,-85,-10,-63,-28,-60,126,-60,-14,32,46,32,46,32,46,32
};
else std::cout<<"Press any keys to contiune . . . ";
_getch();
clear();
break;
}
case 27:{break;}
}
break;
}
case 27:{
if(language=='c') std::cout<<(std::string){-90,65,-88,-93,33}<<'\n';
else std::cout<<"Goodbye!"<<'\n';
auto main_end=std::chrono::high_resolution_clock::now();
auto _cnt_time=
std::chrono::duration_cast<std::chrono::seconds>(main_end-main_start).count();
if(language=='c'){
std::cout<<"--------------------------------"<<'\n';
std::cout<<(std::string){-74,105,-75,123,-90,98}<<_cnt_time<<
(std::string){-84,-19,-90,90,-80,104,-91,88,44,32,-86,-16,-90,94,-83,-56,-84,-80,48}<<'\n';
std::cout<<(std::string){
-85,-10,-91,-12,-73,78,-85,-10,-63,-28,-60,126,-60,-14,32,46,32,46,32,46,32
};
}else{
std::cout<<"--------------------------------"<<'\n';
std::cout<<"Process exited after "<<
_cnt_time<<" seconds with return value 0"<<'\n';
std::cout<<"Press any key to continue . . . ";
}
while(1) _getch();
}
}
}
}
这里空空如也















有帮助,赞一个