- 分享
游戏开发指南
- 2024-12-13 17:30:00 @
(下面的话所指的程序都为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
-
Csvoner SU @ 2025-1-1 12:45:56Edited
问题:
无法输出汉字。
原因:
常见的中文编码 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