(下面的话所指的程序都为C++)

1.如果想在不用画布的情况下做一个画面类游戏,可以像放视频一帧一帧放画面一样每次输出一个画面,然后清屏,再重新输出新画面


2.当你想转换bool类型的值时,除了用 ! (非),也可以用这个:

bool flag;
bool notflag=!flag;
if(/*里面填转换条件*/) swap(flag,notflag);

3.接下来,教大家一点老师不讲的知识:

  • 1.windows.h头文件的应用
    • 一.system("start cmd") 创建一个cmd窗口
    • 二.system("color ab") 改变运行框背景颜色为a,字体颜色为b(a,b为windows下的颜色字符,具体字符表示的颜色在cmd窗口上输入color njx来了解)
    • 三.system("pauce") 点击任意键继续
    • 四.system("cls") 清空运行框
    • 五.system("shutdown /s /t s"); 在s秒后关闭计算机
    • 六.Sleep(x); 等待x秒

4.切换C++14版本

  • 1.打开C++
  • 2.打开工具中的编译选项
  • 3.在第一个框中输入-std=c++14 -O2

5.随机数函数

int rand_(int l,int r){//随机数函数
   std::srand(static_cast<unsigned int>(std::time(nullptr)));
   int random_num = std::rand() % r + l;
   return random_num;
}

于是,一个游戏就诞生了......

#include<bits/stdc++.h>
#include<windows.h>
#include<random>
#include <cstdlib>

using namespace std;

int de=0,fx=4,maxde=0;//得分,恐龙头部y值 
int p=0;char pi[6][9]={"我是恐龙","我是奶龙","我是你妈","阿米诺斯","鸡汤来喽","鸡你太美"};//皮肤
int tiao[20]={5,4,3,2,2,1,1,1,0,0,0,0,0,1,1,1,2,2,3,4};//小恐龙跳跃高度
int flagp[6]={0,100,500,1000,2000,4000};
int rand_(int l,int r){//随机数函数
    std::srand(static_cast<unsigned int>(std::time(nullptr)));
    int random_num = std::rand() % r + l;
    return random_num;
}
void pifu(int x_,int y_){ // 每个汉字两个字符 
	if(x_==y_) cout << pi[p][0] << pi[p][1];
	if(x_==y_+1) cout << pi[p][2] << pi[p][3];
	if(x_==y_+2) cout << pi[p][4] << pi[p][5];
	if(x_==y_+3) cout << pi[p][6] << pi[p][7];
}
void tishi(){
	system("cls");
	cout << "-------------------------"<<endl;
	cout << "           提示          "<<endl;
	cout << "     游戏内按空格跳跃    "<<endl;
	cout << " “X”是仙人掌,碰到会死 "<<endl;
	cout << "跳跃请长按“ ”到跳起为止"<<endl; 
	cout << "-------------------------"<<endl;
	system("pause");
	system("cls");
}
bool shuru_(char h__){//游戏操作--输入 
    for (int i = 0; i <= 255; ++i){
        if (GetAsyncKeyState(i) & 0x8000) {
            if (i == h__){
            	return 1;
            }
        }
    }
    return 0;
}
void chu(){//开始界面 
	system("color 0f");
	cout <<"------------------"<<endl;
	cout << "     小恐龙      "<<endl;
	cout <<"按k开始,按h换皮肤"<<endl;
	cout <<"    按n退出游戏   "<<endl;
	cout <<"    按t查看提示   "<<endl;
	cout <<"   按m查看最高分  "<<endl;
	cout <<"------------------"<<endl;
}
void maxd(){
	cout << "最高分:"<<maxde<<endl;
	system("pause");
}
void huan(){//换皮肤界面 
	cout << "1.我  2.我  3.我  4.阿  5.鸡  6.鸡"<<endl;
	cout << "  是    是    是    米    汤    你"<<endl;
	cout << "  恐    奶    你    诺    来    太"<<endl;
	cout << "  龙    龙    妈    斯    喽    美"<<endl;
	cout << " 2号100分,3号500分,4号1000分"<<endl;
	cout << "    5号2000分,6号4000分    "<<endl;
	cout << "当前最高分:"<<maxde<<endl;
	cout << "   输入皮肤序号(默认为1)  "<<endl;
}
int ch(bool flag_,int y__,int o_,int tiao_){//游戏初始化界面
	int k=tiao_;
	int j_=60;
	int u_i_=1;//是否死亡 
	if(de%500==0 & de%1000!=0) system("color 0f");
	if(de%1000==0) system("color f0");
	if(de%1000==900) system("color 6e");
	if(de%1000==400) system("color e6");
	if(de%2000>=1900 & de%2000<=1999){
		j_=40;
		system("color 7f");
	}
	if(de%500==0 & de%1000!=0 & de%3000<=2999 & de%3000>=2000){
		system("color 40");
		j_=50;
		y__=4;
	}
	cout << "得分:"<<de<<endl;
	for(int i=0;i<10;i++){
		for(int j=0;j<j_;j++){
			if(j==4) pifu(i,k);
		
			if(flag_==1){//仙人掌生成
				if(i>=9-y__ && i<=8 && j==o_){
					if(i==k+3 & j==4) u_i_=0;//判断是否死亡 
					cout << 'X';
				}
			}
			if(i==9) cout << '-';//地
			else cout << ' ';
		}
		cout << endl;
	}
	return u_i_;
}

int main(){
	while(1){
		chu();//初始化
		char w_;//选择 
		cin >> w_;
		if(w_=='h'){//换皮肤 
			system("cls");
			huan();
			int r__;//皮肤序号
			cin >> r__;
			system("cls");
			int p_=r__-1;
			if(maxde>flagp[p_]){
				cout << "更换成功";
				p=(r__-1);
			}
			else cout << "更换失败";
			Sleep(1000);
			system("cls");
		}
		if(w_=='m'){
			system("cls");
			maxd();
			system("cls");
		}
		if(w_=='t'){
			tishi();
		}
		if(w_=='n'){//结束 
			system("cls");
			return 0;
		}
		if(w_=='k'){//游戏运行
			de=0;
			bool ti=0;//是否跳跃 
			int ao=0;//跳跃高度下标 
			bool u=1,o=1;//是否存活(u),是否创建仙人掌(o)
			int r=49;//仙人掌位置
			int r_u_=rand_(1,3);//仙人掌高度
			while(u==1){
        				if(de%3000<2999 & de%3000>2500) r_u_=4;
				if(shuru_(' ')==1 & ti==0){
					ti=1;
				}
				if(o==0){
					r=49+rand_(2,4);
					o=1;
					r_u_=rand_(1,3);
				}
				if(o==1){
					u=ch(1,r_u_,r,tiao[ao]);
					r--;
					if(r<=0) o=0;
				}
				else u=ch(0,0,0,tiao[ao]);
				Sleep(15);
				system("cls");
				de++;
				if(u==0){//死亡界面 
					system("color 0f");
					system("cls");
					cout << "得分:"<<de;
					maxde=max(maxde,de);
					Sleep(2000);
					system("cls");
				}
				if(ti==1 & ao<=18) ao++;
				if(ti==1 & ao==19){
					ao=0;
					ti=0;
				}
			}
		}
	}
	return 0;
}

这个游戏实现了一个跑酷类游戏(记得用C++14及以上版本) 实在不行就用这个:

chrome://dino

2 comments

  • @ 2025-1-1 12:45:56

    @

    问题

    无法输出汉字。

    原因

    常见的中文编码 GB2312(国标简体中文字符集)和 GBK(国标扩展)使用 2 个字节编码表示一个汉字。

    修改

    当用字符数组存储汉字时要注意下列问题。

    进一步可以用二维字符数组存储多句话。

    进一步修改此程序无法输出的问题为:

    C++ 代码

    #include<bits/stdc++.h>
    #include<windows.h>
    #include<random>
    #include <cstdlib>
    
    using namespace std;
    
    int de=0,fx=4;//de为得分,fx为恐龙头部y值 
    int p=0;char pi[4][9]={"我是恐龙","我是奶龙","我是你妈","阿米诺斯"};//皮肤
    int tiao[20]={5,4,3,2,2,1,1,1,0,0,0,0,0,1,1,1,2,2,3,4};//小恐龙跳跃高度
    int rand_(int l,int r){//随机数函数
        std::srand(static_cast<unsigned int>(std::time(nullptr)));
        int random_num = std::rand() % r + l;
        return random_num;
    }
    void pifu(int x_,int y_){ // 每个汉字两个字符 
    	if(x_==y_) cout << pi[p][0] << pi[p][1];
    	if(x_==y_+1) cout << pi[p][2] << pi[p][3];
    	if(x_==y_+2) cout << pi[p][4] << pi[p][5];
    	if(x_==y_+3) cout << pi[p][6] << pi[p][7];
    }
    void tishi(){
    	system("cls");
    	cout << "-------------------------"<<endl;
    	cout << "           提示          "<<endl;
    	cout << "     游戏内按空格跳跃    "<<endl;
    	cout << " “X”是仙人掌,碰到会死 "<<endl;
    	cout << "跳跃请长按“ ”到跳起为止"<<endl; 
    	cout << "-------------------------"<<endl;
    	system("pause");
    	system("cls");
    }
    bool shuru_(char h__){//游戏操作--输入 
        for (int i = 0; i <= 255; ++i){
            if (GetAsyncKeyState(i) & 0x8000) {
                if (i == h__){
                	return 1;
                }
            }
        }
        return 0;
    }
    void chu(){//开始界面 
    	system("color 0f");
    	cout <<"------------------"<<endl;
    	cout << "     小恐龙      "<<endl;
    	cout <<"按k开始,按h换皮肤"<<endl;
    	cout <<"    按n退出游戏   "<<endl;
    	cout <<"    按t查看提示   "<<endl;
    	cout <<"------------------"<<endl;
    }
    void huan(){//换皮肤界面 
    	cout << "1.我  2.我  3.我  4.阿"<<endl;
    	cout << "  是    是    是    米"<<endl;
    	cout << "  恐    奶    你    诺"<<endl;
    	cout << "  龙    龙    妈    斯"<<endl;
    	cout << "输入皮肤序号(默认为1)"<<endl;
    }
    int ch(bool flag_,int y__,int o_,int tiao_){//游戏初始化界面
    	int k=tiao_;
    	int j_=60;
    	int u_i_=1;//是否死亡 
    	if(de%500==0 & de%1000!=0) system("color 0f");
    	if(de%1000==0) system("color f0");
    	if(de%1000==900) system("color 6e");
    	if(de%1000==400) system("color e6");
    	if(de%2000>=1900 & de%2000<=1999){
    		j_=40;
    		system("color 7f");
    	}
    	if(de%500==0 & de%1000!=0 & de%3000<=2999 & de%3000>=2000){
    		system("color 40");
    		j_=50;
    		y__=4;
    	}
    	cout << "得分:"<<de<<endl;
    	for(int i=0;i<10;i++){
    		for(int j=0;j<j_;j++){
    			if(j==4) pifu(i,k);
    		
    			if(flag_==1){//仙人掌生成
    				if(i>=9-y__ && i<=8 && j==o_){
    					if(i==k+3 & j==4) u_i_=0;//判断是否死亡 
    					cout << 'X';
    				}
    			}
    			if(i==9) cout << '-';//地
    			else cout << ' ';
    		}
    		cout << endl;
    	}
    	return u_i_;
    }
    
    int main(){
    	while(1){
    		chu();//初始化
    		char w_;//选择 
    		cin >> w_;
    		if(w_=='h'){//换皮肤 
    			system("cls");
    			huan();
    			int r__;//皮肤序号
    			cin >> r__;
    			p=(r__-1);
    			system("cls");
    			cout << "更换成功";
    			Sleep(1000);
    			system("cls");
    		}
    		if(w_=='t'){
    			tishi();
    		}
    		if(w_=='n'){//结束 
    			system("cls");
    			return 0;
    		}
    		if(w_=='k'){//游戏运行
    			de=0;
    			bool ti=0;//是否跳跃 
    			int ao=0;//跳跃高度下标 
    			bool u=1,o=1;//是否存活(u),是否创建仙人掌(o)
    			int r=49;//仙人掌位置
    			int r_u_=rand_(1,3);//仙人掌高度
    			while(u==1){
            				if(de%3000<2999 & de%3000>2500) r_u_=4;
    				if(shuru_(' ')==1 & ti==0){
    					ti=1;
    				}
    				if(o==0){
    					r=49+rand_(2,4);
    					o=1;
    					r_u_=rand_(1,3);
    				}
    				if(o==1){
    					u=ch(1,r_u_,r,tiao[ao]);
    					r--;
    					if(r<=0) o=0;
    				}
    				else u=ch(0,0,0,tiao[ao]);
    				Sleep(15);
    				system("cls");
    				de++;
    				if(u==0){//死亡界面 
    					system("color 0f");
    					system("cls");
    					cout << "得分:"<<de;
    					Sleep(2000);
    					system("cls");
    				}
    				if(ti==1 & ao<=18) ao++;
    				if(ti==1 & ao==19){
    					ao=0;
    					ti=0;
    				}
    			}
    		}
    	}
    	return 0;
    }
    
    • @ 2024-12-28 16:21:25

      求老师看看

      #include<bits/stdc++.h>
      #include<windows.h>
      #include<random>
      #include <cstdlib>
      
      using namespace std;
      
      int de=0,fx=4;//de为得分,fx为恐龙头部y值 
      int p=0;char pi[4]={'我','是','恐','龙'};//皮肤
      int tiao[20]={5,4,3,2,2,1,1,1,0,0,0,0,0,1,1,1,2,2,3,4};//小恐龙跳跃高度
      int rand_(int l,int r){//随机数函数
          std::srand(static_cast<unsigned int>(std::time(nullptr)));
          int random_num = std::rand() % r + l;
          return random_num;
      }
      void pifu(int x_,int y_){
      	if(x_==y_) cout << pi[0];
      	if(x_==y_+1) cout << pi[1];
      	if(x_==y_+2) cout << pi[2];
      	if(x_==y_+3) cout << pi[3];
      }
      void tishi(){
      	system("cls");
      	cout << "-------------------------"<<endl;
      	cout << "           提示          "<<endl;
      	cout << "     游戏内按空格跳跃    "<<endl;
      	cout << " “X”是仙人掌,碰到会死 "<<endl;
      	cout << "跳跃请长按“ ”到跳起为止"<<endl; 
      	cout << "-------------------------"<<endl;
      	system("pause");
      	system("cls");
      }
      bool shuru_(char h__){//游戏操作--输入 
          for (int i = 0; i <= 255; ++i){
              if (GetAsyncKeyState(i) & 0x8000) {
                  if (i == h__){
                  	return 1;
                  }
              }
          }
          return 0;
      }
      void chu(){//开始界面 
      	system("color 0f");
      	cout <<"------------------"<<endl;
      	cout << "     小恐龙      "<<endl;
      	cout <<"按k开始,按h换皮肤"<<endl;
      	cout <<"    按n退出游戏   "<<endl;
      	cout <<"    按t查看提示   "<<endl;
      	cout <<"------------------"<<endl;
      }
      void huan(){//换皮肤界面 
      	cout << "1.我  2.我  3.我  4.阿"<<endl;
      	cout << "  是    是    是    米"<<endl;
      	cout << "  恐    奶    你    诺"<<endl;
      	cout << "  龙    龙    妈    斯"<<endl;
      	cout << "输入皮肤序号(默认为1)"<<endl;
      }
      int ch(bool flag_,int y__,int o_,int tiao_){//游戏初始化界面
      	int k=tiao_;
      	int j_=60;
      	int u_i_=1;//是否死亡 
      	if(de%500==0 & de%1000!=0) system("color 0f");
      	if(de%1000==0) system("color f0");
      	if(de%1000==900) system("color 6e");
      	if(de%1000==400) system("color e6");
      	if(de%2000>=1900 & de%2000<=1999){
      		j_=40;
      		system("color 7f");
      	}
      	if(de%500==0 & de%1000!=0 & de%3000<=2999 & de%3000>=2000){
      		system("color 40");
      		j_=50;
      		y__=4;
      	}
      	cout << "得分:"<<de<<endl;
      	for(int i=0;i<10;i++){
      		for(int j=0;j<j_;j++){
      			if(j==4) pifu(i,k);
      			if(flag_==1){//仙人掌生成
      				if(i>=9-y__ && i<=8 && j==o_){
      					if(i==k+3 & j==4) u_i_=0;//判断是否死亡 
      					cout << 'X';
      				}
      			}
      			if(i==9) cout << '-';//地
      			else cout << ' ';
      		}
      		cout << endl;
      	}
      	return u_i_;
      }
      
      int main(){
      	while(1){
      		chu();//初始化
      		char w_;//选择 
      		cin >> w_;
      		if(w_=='h'){//换皮肤 
      			system("cls");
      			huan();
      			int r__;//皮肤序号
      			cin >> r__;
      			p=(r__-1);
      			system("cls");
      			if(p==0){
      				pi[0]='我';
      				pi[1]='是'; 
      				pi[2]='恐'; 
      				pi[3]='龙'; 
      			}
      			if(p==1){
      				pi[0]='我';
      				pi[1]='是'; 
      				pi[2]='奶'; 
      				pi[3]='龙'; 
      			}
      			if(p==2){
      				pi[0]='我';
      				pi[1]='是'; 
      				pi[2]='你'; 
      				pi[3]='妈'; 
      			}
      			if(p==3){
      				pi[0]='阿';
      				pi[1]='米'; 
      				pi[2]='诺'; 
      				pi[3]='斯'; 
      			}
      			cout << "更换成功";
      			Sleep(1000);
      			system("cls");
      		}
      		if(w_=='t'){
      			tishi();
      		}
      		if(w_=='n'){//结束 
      			system("cls");
      			return 0;
      		}
      		if(w_=='k'){//游戏运行
      			de=0;
      			bool ti=0;//是否跳跃 
      			int ao=0;//跳跃高度下标 
      			bool u=1,o=1;//是否存活(u),是否创建仙人掌(o)
      			int r=49;//仙人掌位置
      			int r_u_=rand_(1,3);//仙人掌高度
      			while(u==1){
              				if(de%3000<2999 & de%3000>2500) r_u_=4;
      				if(shuru_(' ')==1 & ti==0){
      					ti=1;
      				}
      				if(o==0){
      					r=49+rand_(2,4);
      					o=1;
      					r_u_=rand_(1,3);
      				}
      				if(o==1){
      					u=ch(1,r_u_,r,tiao[ao]);
      					r--;
      					if(r<=0) o=0;
      				}
      				else u=ch(0,0,0,tiao[ao]);
      				Sleep(15);
      				system("cls");
      				de++;
      				if(u==0){//死亡界面 
      					system("color 0f");
      					system("cls");
      					cout << "得分:"<<de;
      					Sleep(2000);
      					system("cls");
      				}
      				if(ti==1 & ao<=18) ao++;
      				if(ti==1 & ao==19){
      					ao=0;
      					ti=0;
      				}
      			}
      		}
      	}
      	return 0;
      }
      
      
      • 1