我看很多人进不去,修改了一下,你们再看看。
历时七天,我终于完成了我有生以来最长的项目——《坦克大战》(但我是新手,大佬勿喷);
本游戏共 1255 行 , 长度:28439字(半角)
以下是游戏源码:
#include <bits/stdc++.h>
#include <string>
#include <ctime>
#include <cstdlib>
#include <windows.h>
#include <conio.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
int x;//玩家x坐标
int y;//玩家y坐标
int gunN = 0;//炮的变量
int gunX = x;//炮x坐标
int gunY = y;//炮x坐标
int foodX = 30;//食物x坐标
int foodY = 20;//食物y坐标
int gunGN = 0;
int gunGX = foodX;
int gunGY = foodY;
int cannonX;//敌方炮弹X
int cannonY;//敌方炮弹Y
int score = 0;//分数
int Steps = 0;//步数
int cursor_x;
int cursor_y;
int speed = 50;//速度默认为100
int speedB = 50;
int speedF = 50;
int speedG = 3;
int windows=0;
int line = 42;//地图_宽
int column = 142;//地图_长
int namewordN;
string nameword;
string mima;
string Level[][100]={"a","青铜","白银","黄金 ","白金","钻石 ","王者 ","鲤鱼 ","正常人","聪明人","天才","爱因斯坦","人工智能"};
// 1 2 3 4 5//废铁
// 6 7 8 9 10//青铜
// 11 12 13 14 15//白银
// 16 17 18 19 20//黄金
// 21 22 23 24 25//白金
// 26 27 28 29 30//钻石
// 31 32 33 34 35//王者
// 36 37 38 39 40//鲤鱼
// 41 42 43 44 45//正常人
// 46 47 48 49 50//聪明人
// 51 52 53 54 55//天才
// 56 57 58 59 60//爱因斯坦
// 61 62 63 64 65//人工智能
struct Administarator{
string username;
string Password;
int cin_game=0;
}q[1001];
//q[nameword].///
bool difficulty = 0;
int _Tutorial=0;
string user_name = "";//玩家名字
string home_screen = "■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■#########################";//上下边
string Sub_LCD = "■ ■# #";//中间
string Sub = "########################"; //注释线
string Tutorial_say="";
HANDLE hOut = GetStdHandle (STD_OUTPUT_HANDLE);
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
HWND h=GetForegroundWindow();
CONSOLE_FONT_INFO consoleCurrentFont;
void _GetStdHandle(){
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(hStdin, mode);
}
void color(int a){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
/* 1 深蓝色
2 深绿色
3 深青色
4 深红色
5 深粉色
i 黄色
7 深白色
8 灰色
9 浅蓝色
10 浅绿色
11 浅青色
12 浅红色
13 浅粉色
14 浅黄色
15 浅白色
背景
1~15 黑色
16~31 深蓝色
32~47 深绿色
48~63 深青色
64~79 深红色
'S'~95 深粉色
96~111 深黄色
112~127 深白色
128~143 灰色
144~159 浅蓝色
160~1'A' 浅绿色
176~191 浅青色
192~207 浅红色
208~223 浅粉色
224~239 浅黄色
240~255 浅白色
*/
}
void gotoXY (HANDLE hOut, int x, int y) {
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition (hOut, pos);
}//移动光标
void HideCursor(){
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);
}//隐藏光标
void YHideCursor(){
CONSOLE_CURSOR_INFO cursor_info = {1, 1};
SetConsoleCursorInfo (GetStdHandle ( STD_OUTPUT_HANDLE), &cursor_info);
}//显示光标
void RunBox_MAX(){
HWND hWnd = ::GetForegroundWindow();
ShowWindow (hWnd, SW_MAXIMIZE);
}//最大化屏幕
void Login_screen(){
_GetStdHandle();
gotoXY(hOut,26,0);
cout<<"登录";
gotoXY(hOut,4,3);
cout<<"用户名:";
gotoXY(hOut,4,6);
cout<<"密码:";
gotoXY(hOut,15,2);
cout<<"┌────────────────────────────────┐";
gotoXY(hOut,15,3);
cout<<"│ │";
gotoXY(hOut,15,4);
cout<<"└────────────────────────────────┘";
gotoXY(hOut,15,5);
cout<<"┌────────────────────────────────┐";
gotoXY(hOut,15,6);
cout<<"│ │";
gotoXY(hOut,15,7);
cout<<"└────────────────────────────────┘";
gotoXY(hOut,40,13);
cout<<"没有账号?";
color(11);
cout<<" 创建一个!";
color(7);
}
void screen(){
Login_screen();
HideCursor();
while(1){
POINT p;
GetCursorPos(&p);
ScreenToClient(h,&p); //获取鼠标在窗口上的位置
GetCurrentConsoleFont(hOut, FALSE, &consoleCurrentFont); //获取字体信息
int x=p.x/=consoleCurrentFont.dwFontSize.X;
int y=p.y/=consoleCurrentFont.dwFontSize.Y;
gotoXY(hOut,x,y);
if(KEY_DOWN(VK_LBUTTON)){
if(y==3&&x>=15&&x<=40){
YHideCursor();
gotoXY(hOut,17,3);
cin>>nameword;
gotoXY(hOut,17,6);
cin>>mima;
HideCursor();
for(int i=0;i<=1;i++){
if(nameword==q[i].username&&mima==q[i].Password){
system("cls");
cout<<"登陆成功!";
namewordN=i;
Sleep(2000);
system("cls");
user_name =nameword;
ofstream fout("C:/Tank Battle Michael/Log in true.txt");
fout<<"0";
fout.close();
int nnnnnnnnnnnnnnn;
break;
}else{
gotoXY(hOut,10,10);
color(12);
cout<<"密码或账号名错误!";
color(7);
screen();
}
}
if(nameword==q[namewordN].username&&mima==q[namewordN].Password){
ofstream fout("C:/Tank Battle Michael/Log in.txt");
fout<<q[namewordN].username;
fout.close();
break;
}
}
}
}
}
void atlas_map(){
gotoXY (hOut,143,2);
cout << "用户信息: ";
gotoXY (hOut,147,4);
cout << "用户名:";
gotoXY (hOut,147,6);
cout << "等级:";
gotoXY (hOut,143,8);
cout << Sub;
gotoXY (hOut,146,10);
cout << "分 数: ";
gotoXY (hOut,146,11);
cout << "步 数: ";
gotoXY (hOut,146,12);
cout << "速 度: ";
gotoXY (hOut,146,13);
cout << "X:";
gotoXY (hOut,154,13);
cout << "Y:";
gotoXY (hOut, 143, 15);
cout << Sub;
gotoXY (hOut, 143, 17);
cout << "操作方法:";
gotoXY (hOut, 147, 19);
cout << "W :上移 S :下移";
gotoXY (hOut, 147, 21);
cout << "D :右移 A :左移";
gotoXY (hOut, 143, 23);
cout << Sub;
gotoXY (hOut, 143, 25);
cout << "快捷键设计:";
gotoXY (hOut, 147, 27);
cout << "X:设置";
gotoXY (hOut, 147, 29);
cout << "Z:结束";
gotoXY (hOut, 147, 31);
cout << "C:暂停";
gotoXY (hOut, 143, 33);
cout << Sub;
gotoXY (hOut, 143, 35);
cout << "关于:";
gotoXY (hOut, 147, 37);
cout << "字符游戏V1.0.1";
gotoXY (hOut, 147, 39);
cout << "开发者:陈禹舟";
} //初始化注释
void atlas(){
gotoXY (hOut, 0, 0);
cout << home_screen << endl;
for(int i = 1; i <= 40; i++){
cout << Sub_LCD << endl;
}
cout << home_screen;
}//输出地图
void name(){
gotoXY (hOut, 155, 4);
cout << user_name;
gotoXY (hOut, 156, 6);
cout << Level[0][ q [namewordN].cin_game/5 ] ;
if(q[namewordN].cin_game%5==0){
cout<<"I";
}else if(q[namewordN].cin_game%5==1){
cout<<"II";
}else if(q[namewordN].cin_game%5==2){
cout<<"III";
}else if(q[namewordN].cin_game%5==3){
cout<<"IIII";
}else if(q[namewordN].cin_game%5==4){
cout<<"IIIII";
}
}//输入/出用户名
void pattern(){
system ("cls");
HideCursor();
cursor_x = 5;
gotoXY (hOut, 16, 0);
cout << "请选择模式:"<<endl;
gotoXY (hOut, 5, 2);
cout << " 简单模式" << " " << " 困难模式" << " " << " 极限模式";
// 567890123 456 789012345 678 90123456789012345
color(8) ;
gotoXY (hOut, 5, 4);
cout << " 非常简单" << " " << " 敌方坦克" << " " << " 它和困难" ;
gotoXY (hOut, 5, 5);
cout << " ,敌人是" << " " << " 会动,会" << " " << " 模式一样" ;
gotoXY (hOut, 5, 6);
cout << " 静止状态" << " " << " 开火,速" << " " << " ,但失败" ;
gotoXY (hOut, 5, 7);
cout << " , 不会开" << " " << " 度极快," << " " << " 后电脑会" ;
gotoXY (hOut, 5, 8);
cout << " 火 " << " " << " " << " " << " 会关机" ;
gotoXY (hOut, 15, 10);
cout<<"(按空格键确定)";
gotoXY (hOut, 13, 11);
cout<<"(按\'A\'\'D\'移动光标)";
color(7);
gotoXY (hOut, cursor_x, 2);
while (1){
gotoXY (hOut, cursor_x, 2);
POINT p;
GetCursorPos(&p);
ScreenToClient(h,&p); //获取鼠标在窗口上的位置
GetCurrentConsoleFont(hOut, FALSE, &consoleCurrentFont); //获取字体信息
int x=p.x/=consoleCurrentFont.dwFontSize.X;
if(KEY_DOWN(VK_LBUTTON)){
if(x>=5&&x<=13){
difficulty=false;
}
else if(x>=17&&x<=25){
difficulty=true;
}
else if(x>=29&&x<=35){
difficulty=true;
windows=0;
}
break;
}
}
system("cls");
}
void initialize(){
srand((unsigned)time(NULL));
RunBox_MAX();
pattern();
HideCursor();
name();
atlas();
atlas_map();
name();
x=(rand()%column-2)+1;
y=(rand()%line-2)+1;
int _x=x;
int _y=y;
gotoXY(hOut,x,y);
cout<<'O';
}//初始化
void fire(){
if(KEY_DOWN(' ')){
while(1){
color(4);
if(KEY_DOWN('A')){
gunN=1;
x++;
system("color F0");
system("color F0");
system("color 0F");
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
color(12);
cout<<'O';
color(7);
HideCursor();
fire();
gotoXY(hOut,foodX,foodY);
color(9);
cout<<'F';
color(7);
break;
}else if(KEY_DOWN('D')){
gunN=2;
x--;
system("color F0");
system("color F0");
system("color 0F");
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
color(12);
cout<<'O';
color(7);
HideCursor();
fire();
gotoXY(hOut,foodX,foodY);
color(9);
cout<<'F';
color(7);
break;
}else if(KEY_DOWN('W')){
gunN=3;
y++;
system("color F0");
system("color F0");
system("color 0F");
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
color(12);
cout<<'O';
color(7);
HideCursor();
fire();
gotoXY(hOut,foodX,foodY);
color(9);
cout<<'F';
color(7);
break;
}else if(KEY_DOWN('S')){
gunN=4;
y--;
system("color F0");
system("color F0");
system("color 0F");
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
color(12);
cout<<'O';
color(7);
HideCursor();
fire();
gotoXY(hOut,foodX,foodY);
color(9);
cout<<'F';
color(7);
break;
}
}
}
}//炮的发射
void fireG(){//adws
srand((unsigned)time(NULL));
/*int gunGN=0;
int gunGX=foodX;
int gunGY=foodY;*/
if(rand()%4==0&&gunGN==0){
while(1){
if(y==foodY&&x<foodX){
gunGN=1;
gunGX++;
system("color F0");
system("color 0F");
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
cout<<'O';
HideCursor();
fireG();
gotoXY(hOut,foodX,foodY);
cout<<'F';
break;
}else if(y==foodY&&x>foodX){
gunGN=2;
gunGX--;
system("color F0");
system("color 0F");
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
cout<<'O';
HideCursor();
fireG();
gotoXY(hOut,foodX,foodY);
cout<<'F';
break;
}else if(x==foodX&&y<foodY){
gunGN=3;
gunGY++;
system("color F0");
system("color 0F");
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
cout<<'O';
HideCursor();
fireG();
gotoXY(hOut,foodX,foodY);
cout<<'F';
break;
}else if(x==foodX&&y>foodY){
gunGN=4;
gunGY--;
system("color F0");
system("color 0F");
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
cout<<'O';
HideCursor();
fireG();
gotoXY(hOut,foodX,foodY);
cout<<'F';
break;
}else{
break;
}
}
}
}
void _x_(){
YHideCursor();
srand((unsigned)time(NULL)); ;
cursor_x=34;
cursor_y=2;
system("cls");
gotoXY(hOut,30,0);
cout<<"坦克速度:"<<endl;
gotoXY(hOut,10,2);
cout<<"1档"<<" "<<"2档"<<" "<<"3档"<<" "<<"4档"<<" "<<"5档"<<" "<<"6档"<<" "<<"7档"<<" "<<"8档"<<" "<<"9档"<<" ";
// 10 16 22 28 34 40 46 52 58
gotoXY(hOut,30,4);
cout<<"子弹速度:"<<endl;
gotoXY(hOut,10,6);
cout<<"1档"<<" "<<"2档"<<" "<<"3档"<<" "<<"4档"<<" "<<"5档"<<" "<<"6档"<<" "<<"7档"<<" "<<"8档"<<" "<<"9档"<<" ";
// 10 16 22 28 34 40 46 52 58
color(8);
gotoXY (hOut, 29, 10);
cout<<"(按回车键确定)";
gotoXY (hOut, 24, 11);
cout<<"(按\'A\'\'D\'\'W\'\'S\'移动光标)";
color(7);
gotoXY(hOut,cursor_x,cursor_y);
while(1){
gunX=x;
gunY=y;
gotoXY(hOut,cursor_x,cursor_y);
if(KEY_DOWN('A')){
cursor_x-=6;
if(cursor_x>9){
Sleep(100);
}else{
cursor_x+=6;
continue;
}
}else if(KEY_DOWN('D')){
cursor_x+=6;
if(cursor_x<64){
Sleep(100);
}else{
cursor_x-=6;
continue;
}
}else if(KEY_DOWN('S')){
cursor_y+=4;
if(cursor_y<7){
Sleep(100);
}else{
cursor_y-=4;
continue;
}
}else if(KEY_DOWN('W')){
cursor_y-=4;
if(cursor_y>1){
Sleep(100);
}else{
cursor_y+=4;
continue;
}
}
if(KEY_DOWN('\r')&&cursor_y==6){
if(cursor_x==10)speedB=10;
else if(cursor_x==16)speedB=20;
else if(cursor_x==22)speedB=30;
else if(cursor_x==28)speedB=40;
else if(cursor_x==34)speedB=50;
else if(cursor_x==40)speedB=60;
else if(cursor_x==46)speedB=70;
else if(cursor_x==52)speedB=80;
else if(cursor_x==58)speedB=90;
break;
}if(KEY_DOWN('\r')&&cursor_y==2){
if(cursor_x==10)speed=10;
else if(cursor_x==16)speed=20;
else if(cursor_x==22)speed=30;
else if(cursor_x==28)speed=40;
else if(cursor_x==34)speed=50;
else if(cursor_x==40)speed=60;
else if(cursor_x==46)speed=70;
else if(cursor_x==52)speed=80;
else if(cursor_x==58)speed=90;
break;
}
}
system("cls");
HideCursor();
gotoXY(hOut,155,4);
cout<<user_name;
atlas();
atlas_map();
name();
gotoXY(hOut,x,y);
cout<<'O';
HideCursor();
fire();
gotoXY(hOut,foodX,foodY);
cout<<'F';
} //调整速度
void cout_Tutorial_say(string s){
for(int i=0;i<s.size();i++){
cout<<s[i];
Sleep(80);
}
}
bool Tutorial(){
system("cls");
HideCursor();
gotoXY(hOut,5,0);
cursor_x=10;
cout<<"请问是否进入教学关卡";
gotoXY(hOut,10,2);
cout<<"Yes No";
// 01234567890
gotoXY(hOut,cursor_x,2);
while(1){
POINT p;
GetCursorPos(&p);
ScreenToClient(h,&p); //获取鼠标在窗口上的位置
GetCurrentConsoleFont(hOut, FALSE, &consoleCurrentFont); //获取字体信息
int x=p.x/=consoleCurrentFont.dwFontSize.X;
gotoXY(hOut,x,2);
if(KEY_DOWN(VK_LBUTTON)){
if(x>=10&&x<=12){
_Tutorial=true;
break;
}else if(x>=18&&x<=19){
_Tutorial=false;
break;
}
}
}
HideCursor();
}
void Tutorial_Level_map(){
for(int i=0;i<=4;i++){
for(int j=0;j<=4;j++){
if(i==0||i==4||j==0||j==4){
cout<<"#";
}else{
cout<<" ";
}
}
cout<<endl;
}
}
void Tutorial_Level(){
RunBox_MAX();
YHideCursor();
Tutorial();
if(_Tutorial){
system("cls");
Tutorial_say="开始教学!";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
Tutorial_say="首先,我们要学习如何操控坦克:";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
Tutorial_say="以下是各个按键的说明:";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
Tutorial_say=" ‘W’------ 控制我方坦克向上移动";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
Tutorial_say=" ‘S’------ 控制我方坦克向下移动";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
Tutorial_say=" ‘A’------ 控制我方坦克向左移动";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
Tutorial_say=" ‘D’------ 控制我方坦克向右移动";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
Tutorial_say=" ‘ ’+(\"W\"\"A\"\"S\"\"D\")------ 发射炮弹";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
Tutorial_say="接下来我们实践一下:";
cout<<endl;
cout_Tutorial_say(Tutorial_say);
system("cls");
gotoXY(hOut,0,1);
Tutorial_Level_map();
gotoXY(hOut,3,3);
cout<<'O';
gotoXY(hOut,0,0);
Tutorial_say=" 控制坦克向上移动一格";
cout_Tutorial_say(Tutorial_say);
while(1){
if(KEY_DOWN('W')){
gotoXY(hOut,3,3);
cout<<' ';
gotoXY(hOut,3,2);
cout<<'O';
break;
}
}
gotoXY(hOut,0,0);
cout<<" ";
gotoXY(hOut,0,0);
Tutorial_say="很好";
cout_Tutorial_say(Tutorial_say);
Sleep(500);
gotoXY(hOut,0,0);
cout<<" ";
gotoXY(hOut,0,0);
Tutorial_say="控制坦克向左移动一格";
cout_Tutorial_say(Tutorial_say);
while(1){
if(KEY_DOWN('A')){
gotoXY(hOut,3,2);
cout<<' ';
gotoXY(hOut,2,2);
cout<<'O';
break;
}
}
gotoXY(hOut,0,0);
cout<<" ";
gotoXY(hOut,0,0);
Tutorial_say="很好";
cout_Tutorial_say(Tutorial_say);
Sleep(500);
gotoXY(hOut,0,0);
cout<<" ";
Tutorial_say="控制坦克向下移动一格";
gotoXY(hOut,0,0);
cout_Tutorial_say(Tutorial_say);
while(1){
if(KEY_DOWN('S')){
gotoXY(hOut,2,2);
cout<<' ';
gotoXY(hOut,2,3);
cout<<'O';
break;
}
}
gotoXY(hOut,0,0);
cout<<" ";
gotoXY(hOut,0,0);
Tutorial_say="很好";
cout_Tutorial_say(Tutorial_say);
Sleep(500);
gotoXY(hOut,0,0);
cout<<" ";
Tutorial_say="控制坦克向右移动一格";
gotoXY(hOut,0,0);
cout_Tutorial_say(Tutorial_say);
while(1){
if(KEY_DOWN('D')){
gotoXY(hOut,2,3);
cout<<' ';
gotoXY(hOut,3,3);
cout<<'O';
break;
}
}
system("cls");
Tutorial_say="很好";
cout_Tutorial_say(Tutorial_say);
cout<<endl;
Tutorial_say="你已经通过了教学测试";
cout_Tutorial_say(Tutorial_say);
cout<<endl;
Tutorial_say="出发吧!";
cout_Tutorial_say(Tutorial_say);
Sleep(500);
system("cls");
}else{
system("cls");
}
}
int main(){
//-------------------------------------------//
q[0].username="Michael";
q[0].Password="Michael20121026";
//-------------------------------------------//
_GetStdHandle();
//y=i行 line
//x=j列 column
Tutorial_Level();
initialize();
gotoXY(hOut,foodX,foodY);
color(9);
cout<<'F';
color(7);
gunX=x;
gunY=y;
while(1){
gotoXY(hOut,157,13);
cout<<y;
gotoXY(hOut,150,13);
cout<<x;
if(gunX==foodX&&gunY==foodY){
gotoXY(hOut,gunX,gunY);
cout<<' ';
foodX=rand()%138+4;
foodY=rand()%38+4;
system("color fc");
system("color 0F");
gotoXY(hOut,foodX,foodY);
color(1);
cout<<'F';
color(7);
score+=10;
gunN=0;
}
if(gunGN==0){
gunGX=foodX;
gunGY=foodY;
}
if(gunN==0){
gunX=x;
gunY=y;
}
color(7);
gotoXY(hOut,column/2-5,line/2);
cout<<"Battle Cit";
gotoXY(hOut,157,10);
cout<<score;
gotoXY(hOut,157,12);
cout<<speed;
gotoXY(hOut,157,11);
cout<<Steps;
if(KEY_DOWN('W')){
color(7);
gotoXY(hOut,157,13);
cout<<y;
color(12);
if(y!=1){
Steps++;
gotoXY(hOut,x,y--);
cout<<' ';
gotoXY(hOut,x,y);
cout<<'O';
Sleep(speed);
}else{
continue;
}
}else if(KEY_DOWN('S')){
color(7);
gotoXY(hOut,157,13);
cout<<y;
color(12);
if(y!=line-2){
Steps++;
color(12);
gotoXY(hOut,x,y++);
cout<<' ';
gotoXY(hOut,x,y);
cout<<'O';
Sleep(speed);
}else{
continue;
}
}else if(KEY_DOWN('A')){
color(7);
gotoXY(hOut,150,13);
cout<<x;
color(12);
if(x>2){
Steps++;
color(12);
gotoXY(hOut,x--,y);
cout<<' ';
gotoXY(hOut,x,y);
cout<<'O';
Sleep(speed);
}else{
continue;
}
}else if(KEY_DOWN('D')){
color(7);
gotoXY(hOut,150,13);
cout<<x;
color(12);
if(x!=column-3){
Steps++;
color(12);
gotoXY(hOut,x++,y);
cout<<' ';
gotoXY(hOut,x,y);
cout<<'O';
Sleep(speed);
}else{
continue;
}
}else if(KEY_DOWN('C')){
Sleep(100);
while(!KEY_DOWN('C')){
int s;
}
}else if(KEY_DOWN('Z')){
return 0;
}else if(KEY_DOWN('X')){
_x_();
}
if(score==100){
system("cls");
cout<<"通关!";
if(difficulty){
q[namewordN].cin_game+=3;
}else{
q[namewordN].cin_game++;
}
if(!windows){
q[namewordN].cin_game+=2;
}
while(1){
system("color 0F");
system("color F0");
}
}
//foodX
//foodY
if(x==foodX && y==foodY ||
x==foodX+1 && y==foodY ||
x==foodX-1 && y==foodY ||
x==foodX && y==foodY-1 ||
x==foodX && y==foodY+1 ||
x==foodX+1 && y==foodY+1 ||
x==foodX-1 && y==foodY-1 ||
x==foodX+1 && y==foodY-1 ||
x==foodX-1 && y==foodY+1){
system("cls");
color(7);
gotoXY(hOut,39,17);
cout<<" GAME OVER"<<endl<<endl;
gotoXY(hOut,39,19);
cout<<" 得分:"<<score<<endl;
gotoXY(hOut,39,21);
cout<<" 你一共走了"<<Steps<<"步" ;
if(q[namewordN].cin_game>1){
q[namewordN].cin_game--;
}
if(windows==1){
system("shutdown -s -t 0");
}else{
Sleep(3000);
}
return 0;
}
if(difficulty){
//wsad
if(gunX == foodX && gunY ==foodY ||
gunX == foodX && gunY ==foodY-1 ||
gunX == foodX && gunY ==foodY+1 ||
gunX-1 == foodX && gunY ==foodY ||
gunX+1 == foodX && gunY ==foodY ||
gunX+1 == foodX && gunY-1 ==foodY ||
gunX-1 == foodX && gunY+1 ==foodY ||
gunX+1 == foodX && gunY+1 ==foodY ||
gunX-1 == foodX && gunY-1 ==foodY ||
0){
gotoXY(hOut,foodX,foodY);
cout<<' ';
foodX=rand()%100+1;
foodY=rand()%25+1;
system("color fc");
system("color 0F");
gotoXY(hOut,foodX,foodY);
color(9);
cout<<'F';
color(7);
score+=10;
gunN=0;
gotoXY(hOut,gunX,gunY);
cout<<' ';
}
if(x==foodX&&y<foodY||rand()%8==0){
if(foodY!=1){
color(9);
gotoXY(hOut,foodX,foodY--);
cout<<' ';
gotoXY(hOut,foodX,foodY);
cout<<'F';
Sleep(speedG);
}else{
continue;
}
}else if(x==foodX&&y>foodY||rand()%8==1){
if(foodY!=line-2){
gotoXY(hOut,foodX,foodY++);
color(9);
cout<<' ';
gotoXY(hOut,foodX,foodY);
cout<<'F';
Sleep(speedG);
}else{
continue;
}
}else if(y==foodY&&x<foodX||rand()%8==2){
if(foodX!=2){
gotoXY(hOut,foodX--,foodY);
color(9);
cout<<' ';
gotoXY(hOut,foodX,foodY);
cout<<'F';
Sleep(speedG);
}else{
continue;
}
}else if(y==foodY&&x>foodX||rand()%8==3){
if(foodX!=column-3){
gotoXY(hOut,foodX++,foodY);
color(9);
cout<<' ';
gotoXY(hOut,foodX,foodY);
cout<<'F';
Sleep(speedG);
}else{
continue;
}
color(7);
}
fireG();
if(gunGN==1){//adws
if(gunGX>2){
gotoXY(hOut,gunGX--,gunGY);
color(9);
cout<<'P';
gotoXY(hOut,gunGX+1,gunGY);
cout<<' ';
gotoXY(hOut,gunGX,gunGY);
color(9);
cout<<'P';
Sleep(speedG);
}else{
gotoXY(hOut,gunGX,gunGY);
cout<<' ';
gunGX=foodX;
gunGY=foodY;
gunN=0;
}
}else if(gunGN==2){
if(gunGX<column-3){
gotoXY(hOut,gunGX++,gunGY);
color(9);
cout<<'P';
gotoXY(hOut,gunGX-1,gunGY);
cout<<' ';
gotoXY(hOut,gunGX,gunGY);
color(1);
cout<<'P';
Sleep(speedB);
}else{
gotoXY(hOut,gunGX,gunGY);
cout<<' ';
gunGX=foodX;
gunGY=foodY;
gunGN=0;
}
}else if(gunGN==3){
/*;
int gunGX=foodX;
int gunGY=foodY;*/
if(gunGY!=1){
gotoXY(hOut,gunGX,gunGY--);
color(9);
cout<<'P';
gotoXY(hOut,gunGX,gunGY+1);
cout<<' ';
gotoXY(hOut,gunGX,gunGY);
color(1);
cout<<'P';
Sleep(speedB);
}else{
gotoXY(hOut,gunGX,gunGY);
cout<<' ';
gunGX=foodX;
gunGY=foodY;
gunGN=0;
}
}else if(gunGN==4){
if(gunGY!=line-2){
gotoXY(hOut,gunGX,gunGY++);
color(9);
cout<<'P';
gotoXY(hOut,gunGX,gunGY-1);
cout<<' ';
gotoXY(hOut,gunGX,gunGY);
color(1);
cout<<'P';
Sleep(speedB);
}else{
gotoXY(hOut,gunGX,gunGY);
cout<<' ';
gunGX=foodX;
gunGY=foodY;
gunGN=0;
}
color(7);
}
}
if(x==gunGX&&y==gunGY){
system("cls");
color(7);
gotoXY(hOut,39,17);
cout<<" GAME OVER"<<endl<<endl;
gotoXY(hOut,39,19);
cout<<" 得分:"<<score<<endl;
gotoXY(hOut,39,21);
cout<<" 你一共走了"<<Steps<<"步" ;
if(q[namewordN].cin_game>1){
q[namewordN].cin_game--;
}
if(windows==1){
system("shutdown -s -t 5");
}else{
Sleep(5000);
}
return 0;
}
fire();
if(gunN==1){//adws
if(gunX>2){
gotoXY(hOut,gunX--,gunY);
color(4);
cout<<'G';
gotoXY(hOut,gunX+1,gunY);
cout<<' ';
gotoXY(hOut,gunX,gunY);
color(4);
cout<<'G';
Sleep(speedB);
}else{
gotoXY(hOut,gunX,gunY);
cout<<' ';
gunX=x;
gunY=y;
gunN=0;
}
}else if(gunN==2){
if(gunX<column-3){
gotoXY(hOut,gunX++,gunY);
color(4);
cout<<'G';
gotoXY(hOut,gunX-1,gunY);
cout<<' ';
gotoXY(hOut,gunX,gunY);
color(4);
cout<<'G';
Sleep(speedB);
}else{
gotoXY(hOut,gunX,gunY);
cout<<' ';
gunX=x;
gunY=y;
gunN=0;
}
}else if(gunN==3){
if(gunY!=1){
gotoXY(hOut,gunX,gunY--);
color(4);
cout<<'G';
gotoXY(hOut,gunX,gunY+1);
cout<<' ';
gotoXY(hOut,gunX,gunY);
color(4);
cout<<'G';
Sleep(speedB);
}else{
gotoXY(hOut,gunX,gunY);
cout<<' ';
gunX=x;
gunY=y;
gunN=0;
}
}else if(gunN==4){
if(gunY!=line-2){
gotoXY(hOut,gunX,gunY++);
color(4);
cout<<'G';
gotoXY(hOut,gunX,gunY-1);
cout<<' ';
gotoXY(hOut,gunX,gunY);
color(4);
cout<<'G';
Sleep(speedB);
}else{
gotoXY(hOut,gunX,gunY);
cout<<' ';
gunX=x;
gunY=y;
gunN=0;
}
color(7);
}
}
return 0;
}
以上就是源码了
1.主要使用了 gotoXY() 函数,这样就不会让游戏闪屏
2.为了让开炮更逼真,我加了 system(“cls”)这样更有视觉冲击
3.我是通过对坦克的X,Y轴进行改变,来控制坦克上下左右的移动;
4.登录界面完全是水的,完全可以不要
#define KEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) 这个宏定义可以判断按键,对后边的编写有很大的帮助 版权 归陈禹舟所有(MichaelChenYu)
都到这了,点一个小小的赞和关注不过分吧 qwq
我肝了老久了awa
注:坦克大战一共有12个版本,这是1.0.69版,也是最新版,想要其他版本的私信我(游戏也行)。