4399Q版泡泡堂(DEVC++实现+解析)

目录

前言:

基本数据

头文件

using namespace std;以及变量

open()函数

play1()函数

最后就是main()

源码

效果图


前言:

今天我们来复刻一个4399经典小游戏Q版泡泡堂(爷青回)。(因为我4399没号,玩不了,555……)

实现效果:

        1P:wasd移动,f放炸弹,2P:ijkl移动,h放炸弹,为了更好玩,自己可能被自己放的炸弹炸死,双方只有一条命。

基本数据

本作头文件:10个,行数:185(对比别人的800行还bug满天飞,很不错了)长度:3710

头文件

各头文件用途见注释。(有4个可以删除,具体见注释)

#include<algorithm>//习惯性动作
#include<fstream>//这是从存档版街篮复制下来的
#include<iostream>//这玩意用于输出(是人都知道)
#include<stdio.h>//同下
#include<cstdio>//同上
#include<iostream>//不小心打多了
#include<windows.h>/用于延时、控制字体颜色、输出等
#include<conio.h>//用于判断按键
#include <time.h>//习惯性动作
#include <stdlib.h>//习惯性动作

using namespace std;以及变量

用途见注释

using namespace std; //O炸弹,绿1P红2P,地图:5*5
int x1,y1,x2,y2;//1、2p坐标
int b1x=-2,b1y=-2;//1p炸弹
int b2x=-2,b2y=-2;//2p炸弹

open()函数

用于实现开机动画,即开始游戏界面。

int open() {
	cout<<"					4399泡泡堂(简化版)"<<endl;
	cout<<"复刻:黑客小C"<<endl;
	cout<<"规则:1p:wasdf,2p:ikjlh,放下炸弹后(1p是右,2p是左)出现一个炸弹(一人一个),谁碰谁没";
	while(!kbhit()) {//循环到按下按键

	}
	system("cls");//删除控制台所有输出内容
}

play1()函数

一开始我想1、2p分开,后来发现会出bug,所以就放在一起写,如果大家写双人小游戏发现只有1p能一直动,2p有时候卡在一个点,动不了就可以试试写在一个函数。同样,请留意注释

int play1() {
	char p1;//储存按下键
	if(kbhit()) {
		p1=getch();
		if(p1=='w') {
			x1--;
		}
		if(p1=='a') {
			y1--;
		}
		if(p1=='s') {
			x1++;
		}
		if(p1=='d') {
			y1++;
		}
		if(p1=='f') {
			b1x=x1;
			b1y=y1;
			b1y++;
		}
		if(p1=='i') {
			x2--;
		}
		if(p1=='j') {
			y2--;
		}
		if(p1=='k') {
			x2++;
		}
		if(p1=='l') {
			y2++;
		}
		if(p1=='h') {
			b2x=x2;
			b2y=y2;
			b2y--;
		}
	}
	if(x1<0){
		x1=0;
	}
	if(x2<0){
		x2=0;
	}
	if(x1>4){
		x1=4;
	}
	if(x2>4){
		x2=4;
	}
	if(y1<0){
		x1=0;
	}
	if(y2<0){
		x2=0;
	}
	if(y1>4){
		x1=4;
	}
	if(y2>4){
		x2=4;
	}
//后面的if用于空气墙和移动
}

最后就是main()

本代码用了循环嵌套,运行一次局数不限,按o退出。

int main() {
	long long sfz;
	long long sfz2;
	cout<<"请输入身份证号:"<<endl;
	cin>>sfz;
	SYSTEMTIME sys;
	GetLocalTime(&sys);
	time_t now=time(0);
	tm *gmtm = gmtime(&now);
	tm *ltm = localtime(&now);
	y=1900 + ltm->tm_year;
	x=1 + ltm->tm_mon;
	z=y-2022;
	z*=4;
	system("cls");
	sfz2=sfz%1000000000000/100000000;
	if((sfz2-y)<18&&(sys.wDayOfWeek<5||sys.wHour<8||sys.wHour>9)){
		return 0;
	}
	char f;
	open();
	while(true) {
		b1x=-1;
		b1y=-2;
		b2x=-2;
		b2y=-2;
		if(f=='o') {
			break;
		}
		x1=0;
		y1=0;
		x2=4;
		y2=4;
		while(true) {
			out();
			play1();
			if((b1x==x2&&b1y==y2)||(b2x==x2&&b2y==y2)) {
				system("cls");
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
				cout<<"1p胜利";
				Sleep(2000);
				break;
			}
			if((b2x==x1&&b2y==y1)||(b1x==x1&&b1y==y1)) {
				system("cls");
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
				cout<<"2p胜利";
				Sleep(2000);
				break;
			}
			Sleep(200);
		}
		system("cls");
		cout<<"当前赛季:SSS"<<z<<endl;
		cout<<"按o退出";
		while(!kbhit()) {

		}
		f=getch();
		system("cls");
	}
	return 0;
}

源码

#include<algorithm>
#include<fstream>
#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<iostream>
#include<windows.h>
#include<conio.h>
#include <time.h>
#include <stdlib.h>
using namespace std; //O炸弹,绿1P红2P,地图:5*5
int x1,y1,x2,y2;
int b1x=-2,b1y=-2;
int b2x=-2,b2y=-2;
int x,y,z;
int open() {
	cout<<"					4399泡泡堂(简化版)"<<endl;
	cout<<"复刻:黑客小C"<<endl;
	cout<<"规则:1p:wasdf,2p:ikjlh,放下炸弹后(1p是右,2p是左)出现一个炸弹(一人一个),谁碰谁没"<<endl;
	cout<<"当前赛季:SSS"<<z<<endl;
	while(!kbhit()) {

	}
	system("cls");
}
int out() {
	system("cls");
	for(int i=-1; i<6; i++) {
		for(int j=-1; j<6; j++) {
			if(i>=1&&i<=3&&j>=1&&j<=3){
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
				cout<<"*";
			} 
			else if(i==-1||i==5) {
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED| FOREGROUND_BLUE|FOREGROUND_GREEN);
				cout<<"*";
			} else if(j==-1||j==5) {
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED| FOREGROUND_BLUE|FOREGROUND_GREEN);
				cout<<"*";
			} else if(i==x1&&j==y1) {
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
				cout<<"*";
			} else if(i==x2&&j==y2) {
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
				cout<<"*";
			} else if(i==b1x&&j==b1y) {
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
				cout<<"O";
			}else if(i==b2x&&j==b2y){
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
				cout<<"O";
			}else {
				cout<<" ";
			}
		}
		cout<<endl;
	}
}
int play1() {
	char p1;
	if(kbhit()) {
		p1=getch();
		if(p1=='w') {
			x1--;
		}
		if(p1=='a') {
			y1--;
		}
		if(p1=='s') {
			x1++;
		}
		if(p1=='d') {
			y1++;
		}
		if(p1=='f') {
			b1x=x1;
			b1y=y1;
			b1y++;
		}
		if(p1=='i') {
			x2--;
		}
		if(p1=='j') {
			y2--;
		}
		if(p1=='k') {
			x2++;
		}
		if(p1=='l') {
			y2++;
		}
		if(p1=='h') {
			b2x=x2;
			b2y=y2;
			b2y--;
		}
	}
	if(x1<0){
		x1=0;
	}
	if(x2<0){
		x2=0;
	}
	if(x1>4){
		x1=4;
	}
	if(x2>4){
		x2=4;
	}
	if(y1<0){
		x1=0;
	}
	if(y2<0){
		x2=0;
	}
	if(y1>4){
		x1=4;
	}
	if(y2>4){
		x2=4;
	}
}
int main() {
	long long sfz;
	long long sfz2;
	cout<<"请输入身份证号:"<<endl;
	cin>>sfz;
	SYSTEMTIME sys;
	GetLocalTime(&sys);
	time_t now=time(0);
	tm *gmtm = gmtime(&now);
	tm *ltm = localtime(&now);
	y=1900 + ltm->tm_year;
	x=1 + ltm->tm_mon;
	z=y-2022;
	z*=4;
	system("cls");
	sfz2=sfz%1000000000000/100000000;
	if((sfz2-y)<18&&(sys.wDayOfWeek<5||sys.wHour<8||sys.wHour>9)){
		return 0;
	}
	char f;
	open();
	while(true) {
		b1x=-1;
		b1y=-2;
		b2x=-2;
		b2y=-2;
		if(f=='o') {
			break;
		}
		x1=0;
		y1=0;
		x2=4;
		y2=4;
		while(true) {
			out();
			play1();
			if((b1x==x2&&b1y==y2)||(b2x==x2&&b2y==y2)) {
				system("cls");
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
				cout<<"1p胜利";
				Sleep(2000);
				break;
			}
			if((b2x==x1&&b2y==y1)||(b1x==x1&&b1y==y1)) {
				system("cls");
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
				cout<<"2p胜利";
				Sleep(2000);
				break;
			}
			Sleep(200);
		}
		system("cls");
		cout<<"当前赛季:SSS"<<z<<endl;
		cout<<"按o退出";
		while(!kbhit()) {

		}
		f=getch();
		system("cls");
	}
	return 0;
}

效果图

绿1p红2p蓝炸弹白空气墙。

 学废了吗?

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值