目录
前言:
今天我们来复刻一个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蓝炸弹白空气墙。
学废了吗?