自制小游戏:G.cpp
2024-08-16 20:04:17
发布于:浙江
天目山,摸鱼,做游戏,懂?
未完,可能会做很久。有些bug懒得修,史山代码修起来累。
不好玩!大家随便看看就行了
#include<iostream>
#include<conio.h>
#include<windows.h>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int px,py,mx,my,ps,dm[4][2]={{-1,0},{0,1},{1,0},{0,-1}},php=10,cnt=0,wep=0,pt=0,killn=0,CD;
char in;
const string RED = "\033[31m";
const string GREEN = "\033[32m";
const string YELLOW = "\033[33m";
const string BLUE = "\033[34m";
const string RESET = "\033[0m";
char map[114][114]={
"WWWWWWWWWW",
"W W W",
"W W W",
"W W W",
"W W",
"W W",
"W W W",
"W W W",
"W W W",
"WWWWWWWWWW"};
char mps[114][114][114]={{
"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW",
"W W",
"W W",
"W W",
"W W",
"W W",
"W W",
"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"},
{
"WWWWWWWWWW",
"W W W",
"W W W",
"W W W",
"W W",
"W W",
"W W W",
"W W W",
"W W W",
"WWWWWWWWWW"}
};
struct wepon{
int x,y,s,type;
};
struct enemy{
int x,y,hp,type,s;
};
struct NPC{
int x,y;
char name;
int f;
};
vector<wepon> wepons;
vector<enemy> enemies;
vector<NPC> NPCs;
void menu(){
int flag=1;
char in;
while(114514){
system("cls");
cout<<" _______ _______ _______ _______ \n";
cout<<"| | | | | |\n";
cout<<"| | | | | |\n";
cout<<"| ___ | |_______| |_______|\n";
cout<<"| | | | | \n";
cout<<"|_______| o |_______ | | \n\n\n";
if(flag==1){
cout<<YELLOW<<"开始游戏 "<<RESET;
}else{
cout<<"开始游戏 ";
}
if(flag==2){
cout<<YELLOW<<"继续游戏 "<<RESET;
}else{
cout<<"继续游戏 ";
}
cout<<"\n\n按a/d选择按钮,按j确定。";
in=getch();
if(in=='a'){
flag++;
if(flag>2){
flag=1;
}
}else if(in=='d'){
flag--;
if(flag<1){
flag=2;
}
}else if(in=='j'){
if(flag==1){
return;
}
}
}
}
void say(string s){
for(int i=0;i<s.size();i++){
cout<<s[i];
Sleep(50);
}cout<<endl;
Sleep(700);
}
void changeMap(int i,int mxx,int mxy){
memset(map,0,sizeof map);
for(int x=0;x<mxx;x++){
for(int y=0;y<mxy;y++){
map[x][y]=mps[i][x][y];
}
}
}
void update(){
system("cls");
for(int i=0;i<mx;i++){
cout<<map[i]<<endl;
}cout<<"hp";
for(int i=0;i<php;i++){
cout<<'=';
}
}
void playerMove(char in){
map[px][py]=' ';
if(in=='w'){
if(map[px-1][py]==' '){
px--;
}ps=0;
}else if(in=='s'){
if(map[px+1][py]==' '){
px++;
}ps=2;
}else if(in=='a'){
if(map[px][py-1]==' '){
py--;
}ps=3;
}else if(in=='d'){
if(map[px][py+1]==' '){
py++;
}ps=1;
}
map[px][py]='P';
}
void shoot(){
if(wep==0){
if(CD<=0){
CD=2;
wepon i;
i.s=ps;i.x=px;i.y=py;i.type=0;
wepons.push_back(i);
}
}
}
void createNPC(int x,int y,char name){
NPC i;
i.name=name;i.x=x;i.y=y;i.f=0;
NPCs.push_back(i);
}
void createEnemy(int x,int y,int hp,int type){
enemy i;
i.hp=hp;i.type=type;i.x=x;i.y=y;i.s=0;
enemies.push_back(i);
}
void NPCdo(){
for(int i=0;i<NPCs.size();i++){
if(NPCs[i].name=='T'){
map[NPCs[i].x][NPCs[i].y]='T';
if(map[NPCs[i].x][NPCs[i].y]=='P' or map[NPCs[i].x-1][NPCs[i].y]=='P' or map[NPCs[i].x+1][NPCs[i].y]=='P' or map[NPCs[i].x][NPCs[i].y-1]=='P' or map[NPCs[i].x][NPCs[i].y+1]=='P'){
map[NPCs[i].x][NPCs[i].y]=='P';
if(NPCs[i].f==0){
say("\nT:我现在给你一个\".\"式字符手枪,这是这里的最基本的武器。当你点\"j\"时,它会向你的朝向射击");
say("T:前面有一个稻草人");
say("T:打他吧!");
NPCs[i].f=1;
pt=2;
}
}
}
}
}
void weponMove(){
for(int i=0;i<wepons.size();i++){
if(wepons[i].type==0){
if(map[wepons[i].x+dm[wepons[i].s][0]][wepons[i].y+dm[wepons[i].s][1]]!='W'){
if(map[wepons[i].x][wepons[i].y]!='P' and map[wepons[i].x][wepons[i].y]!='T'){
map[wepons[i].x][wepons[i].y]=' ';
}
wepons[i].x+=dm[wepons[i].s][0];
wepons[i].y+=dm[wepons[i].s][1];
map[wepons[i].x][wepons[i].y]='.';
}else{
if(map[wepons[i].x][wepons[i].y]!='P' and map[wepons[i].x][wepons[i].y]!='T'){
map[wepons[i].x][wepons[i].y]=' ';
}
vector<wepon>::iterator it = wepons.begin()+i;
wepons.erase(it);
}
}
}
}
void enemyMove(){
for(int i=0;i<enemies.size();i++){
if(enemies[i].type==0){
if(map[enemies[i].x][enemies[i].y]=='.' or map[enemies[i].x-1][enemies[i].y]=='.' or map[enemies[i].x+1][enemies[i].y]=='.' or map[enemies[i].x][enemies[i].y-1]=='.' or map[enemies[i].x][enemies[i].y+1]=='.'){
enemies[i].hp--;
}
if(enemies[i].hp<=0){
map[enemies[i].x][enemies[i].y]=' ';
vector<enemy>::iterator it = enemies.begin()+i;
enemies.erase(it);
killn++;
continue;
}
map[enemies[i].x][enemies[i].y]=' ';
if(px<enemies[i].x and map[enemies[i].x-1][enemies[i].y]==' '){
enemies[i].s=0;
enemies[i].x-=1;
}
if(px>enemies[i].x and map[enemies[i].x+1][enemies[i].y]==' '){
enemies[i].s=2;
enemies[i].x+=1;
}
if(py>enemies[i].y and map[enemies[i].x][enemies[i].y+1]==' '){
enemies[i].s=1;
enemies[i].y+=1;
}
if(py<enemies[i].y and map[enemies[i].x][enemies[i].y-1]==' '){
enemies[i].s=0;
enemies[i].y-=1;
}
map[enemies[i].x][enemies[i].y]='0';
if(map[enemies[i].x][enemies[i].y]=='P' or map[enemies[i].x-1][enemies[i].y]=='P' or map[enemies[i].x+1][enemies[i].y]=='P' or map[enemies[i].x][enemies[i].y-1]=='P' or map[enemies[i].x][enemies[i].y+1]=='P'){
php--;
}
}else if(enemies[i].type==114514){
map[enemies[i].x][enemies[i].y]='!';
if(map[enemies[i].x][enemies[i].y]=='.' or map[enemies[i].x-1][enemies[i].y]=='.' or map[enemies[i].x+1][enemies[i].y]=='.' or map[enemies[i].x][enemies[i].y-1]=='.' or map[enemies[i].x][enemies[i].y+1]=='.'){
if(pt==2){
pt=3;
}
}
}
}
}void clearEnemy(){
for(int i=0;i<enemies.size();i++){
vector<enemy>::iterator it = enemies.begin()+i;
enemies.erase(it);
}
}void clearWepon(){
for(int i=0;i<wepons.size();i++){
vector<wepon>::iterator it = wepons.begin()+i;
wepons.erase(it);
}
}
void openMap(){
int flag=1;
while(114514){
system("cls");
if(flag==1){
cout<<YELLOW<<"训练场 "<<RESET;
}else{
cout<<"训练场 ";
}
if(flag==2){
cout<<YELLOW<<"野外 "<<RESET;
}else{
cout<<"野外 ";
}
cout<<"\n\n按a/d选择按钮,按j确定。";
in=getch();
if(in=='a'){
flag++;
if(flag>2){
flag=1;
}
}else if(in=='d'){
flag--;
if(flag<1){
flag=2;
}
}else if(in=='j'){
if(flag==1){
clearWepon();
clearEnemy();
mx=8;my=32;
changeMap(0,mx,my);
createNPC(3,13,'T');
px=1;py=1;
map[px][py]='P';
update();
}else if(flag==2){
clearWepon();
clearEnemy();
mx=10;my=10;
changeMap(1,mx,my);
px=1;py=1;
map[px][py]='P';
killn=0;
cnt=0;
update();
}
return;
}
}
}
int main(){
menu();
system("cls");
say("是否跳过新手教程?Y/N");
cin>>in;
if(in=='N'){
say("你是一位勇士");
say("你的名字叫\"P\"");
say("你生来就有着使命");
say("那就是前往名叫\"小木屋\"的城堡监狱,解救你被囚禁的国王:Y7L");
system("cls");
say("这是你的第一次训练");
say("加油!");
say("T:赶紧来!");
say("看,你的老师叫你过去了");
say("快去吧!");
pt=1;
mx=8;my=32;
changeMap(0,mx,my);
createNPC(3,13,'T');
px=1;py=1;
map[px][py]='P';
update();
say("按w、a、s、d移动");
while(pt==1){
NPCdo();
update();
in=getch();
playerMove(in);
}
createEnemy(3,25,114514,114514);
while(pt==2){
weponMove();
update();
in=getch();
if(in=='j'){
shoot();
}else{
playerMove(in);
}
enemyMove();
cnt++;
CD--;
}say("\nT:非常好!");
say("T:我想你可以去野外闯荡了");
say("T:我知道有点快");
say("T:但是管他呢");
say("T:去吧!**10个怪以前别回来!");
while(pt==2){
weponMove();
update();
in=getch();
if(in=='j'){
shoot();
}else{
playerMove(in);
}
enemyMove();
cnt++;
}
clearWepon();
clearEnemy();
mx=10;my=10;
changeMap(1,mx,my);
px=1;py=1;
map[px][py]='P';
killn=0;
cnt=0;
createEnemy(8,8,1,0);
enemyMove();
update();
say("\n看,前面是最小的怪物:0,被子弹碰一下就死了。但是它可以斜着移动。就按老师说的,杀10个吧!");
while(php>0 and killn<10){
weponMove();
update();
in=getch();
if(in=='j'){
shoot();
}else{
playerMove(in);
}
enemyMove();
cnt++;
if(cnt%5==0){
createEnemy(8,8,1,0);
}
CD--;
}if(php<=0){
system("cls");
cout<<RED<<"YOU DIE!"<<RESET;
Sleep(5);
}
pt=4;
mx=8;my=32;
clearWepon();
clearEnemy();
changeMap(0,mx,my);
createNPC(3,13,'T');
px=1;py=1;
map[px][py]='P';
update();
if(php<=0){
php=10;
say("\nT:你怎么这也能死?");
say("T:算了,你先想干什么干什么吧");
}else{
say("\nT:很好,你现在可以先干点别的了");
}say("对了,按M可以打开地图传送");
}
openMap();
while(php>0){
weponMove();
update();
in=getch();
if(in=='j'){
shoot();
}else if(in=='m'){
openMap();
}else{
playerMove(in);
}
enemyMove();
cnt++;
if(cnt%5==0){
createEnemy(8,8,1,0);
}
CD--;
}
// px=1;py=1;
// mx=10;my=10;
// map[px][py]='P';
// while(php>0){
// weponMove();
// update();
// in=getch();
// if(in=='j'){
// shoot();
// }else{
// playerMove(in);
// }
// enemyMove();
// cnt++;
// if(cnt%5==0){
// createEnemy(8,8,1,0);
// }
// }
system("cls");
cout<<RED<<"YOU DIE!"<<RESET;
}
全部评论 1
没太看懂游戏规则
2024-09-08 来自 江苏
0
有帮助,赞一个