1
已采纳
马佳滢
新手天翼
新手天翼
one
#include<iostream>
#include<windows.h>
#include<time.h>
#include<conio.h>
using namespace std;
// 刷新当前屏幕
inline void Refresh(char q[][22], int grade, int gamespeed){
system("cls"); // 清屏
int i,j;
cout << endl;
for(i=0;i<22;i++){
cout << "\t";
for(j=0;j<22;j++)
cout<<q[i][j]<<' '; // 输出贪吃蛇棋盘
if(i==0) cout << "\t等级为:" << grade;
if(i==4) cout << "\t自动前进时间";
if(i==6) cout << "\t间隔为:" << gamespeed << "ms";
cout<<endl;
}
}
int main(){
char tcsQipan[22][22]; // 贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)
int i,j;
for(i=1;i<=20;i++)
for(j=1;j<=20;j++)
tcsQipan[i][j]=' '; // 初始化贪吃蛇棋盘中间空白部分
for(i=0;i<=21;i++)
tcsQipan[0][i] = tcsQipan[21][i] = '-'; //初始化贪吃蛇棋盘上下墙壁
for(i=1;i<=20;i++)
tcsQipan[i][0] = tcsQipan[i][21] = '|'; //初始化贪吃蛇棋盘左右墙壁
int tcsZuobiao[2][100]; //蛇的坐标数组
for(i=0; i<4; i++){
tcsZuobiao[0][i] = 1;
tcsZuobiao[1][i] = i + 1;
}
int head = 3,tail = 0;
for(i=1;i<=3;i++)
tcsQipan[1][i]='****'; //蛇身
tcsQipan[1][4]='#'; //蛇头
int x1, y1; // 随机出米
srand(time(0));
do{
x1=rand()%20+1;
y1=rand()%20+1;
}while(tcsQipan[x1][y1]!=' ');
tcsQipan[x1][y1]='=';
cout<<"\n\n\t\t贪吃蛇游戏即将开始 !\n\t\t欢迎玩家 play此蒟蒻游戏!"<<endl;//准备开始;;
long start;
int grade = 1, length = 4;
int gamespeed = 500; //前进时间间隔
for(i=3;i>=0;i--){
start=clock();
while(clock()-start<=1000);
system("cls");
if(i>0)
cout << "\n\n\t\t进入倒计时:" << i << endl;
else
Refresh(tcsQipan,grade,gamespeed);
}
int timeover;
char direction = 77; // 初始情况下,向右运动
int x,y;
while(1){
timeover = 1;
start = clock();
while((timeover=(clock()-start<=gamespeed))&&!kbhit());
//如果有键按下或时间超过自动前进时间间隔则终止循环
if(timeover){
getch();direction = getch();
}
switch(direction){
case 72: x= tcsZuobiao[0][head]-1; y= tcsZuobiao[1][head];break; // 向上
case 80: x= tcsZuobiao[0][head]+1; y= tcsZuobiao[1][head];break; // 向下
case 75: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]-1;break; // 向左
case 77: x= tcsZuobiao[0][head]; y= tcsZuobiao[1][head]+1; // 向右
}
if(!(direction==72||direction==80||direction==75 ||direction==77)){ // 按键非方向键
cout << "\tGame over!\n\t玩家棒棒哒" << endl;return 0;
}
if(x==0 || x==21 ||y==0 || y==21){ // 碰到墙壁
cout << "\tGame over!\n\t玩家棒棒哒" << endl;return 0;
}
if(tcsQipan[x][y]!=' '&&!(x==x1&&y==y1)){ // 蛇头碰到蛇身
cout << "\tGame over!\n\t玩家棒棒哒" << endl;return 0;
}
if(x==x1 && y==y1){ // 吃米,长度加1
length ++;
if(length>=8){
length -= 8;
grade ++;
if(gamespeed>=200)
gamespeed = 550 - grade * 50; // 改变自动前进时间间隔
}
tcsQipan[x][y]= '#';
tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = '*';
head = (head+1)%100;
tcsZuobiao[0][head] = x;
tcsZuobiao[1][head] = y;
do
{
x1=rand()%20+1;
y1=rand()%20+1;
}while(tcsQipan[x1][y1]!=' ');
tcsQipan[x1][y1]='=';
Refresh(tcsQipan,grade,gamespeed);
}
else{ // 不吃米
tcsQipan [tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=' ';
tail=(tail+1)%100;
tcsQipan [tcsZuobiao[0][head]][tcsZuobiao[1][head]]='*';
head=(head+1)%100;
tcsZuobiao[0][head]=x;
tcsZuobiao[1][head]=y;
tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]='#';
Refresh(tcsQipan,grade,gamespeed);
}
}
return 0;
}
two.
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string>
using namespace std;
typedef struct Frame
{
COORD position[2];
int flag;
}Frame;
void SetPos(COORD a)
{
HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(out, a);
}
void SetPos(int i, int j)
{
COORD pos={i, j};
SetPos(pos);
}
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch)
{
SetPos(x1,y);
for(int i = 0; i <= (x2-x1); i++) cout<<ch;
}
//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawRow(COORD a, COORD b, char ch)
{
if(a.Y == b.Y) drawRow(a.Y, a.X, b.X, ch);
else {
SetPos(0, 25);
cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
system("pause");
}
}
//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch)
{
int y=y1;
while(y!=y2+1) {
SetPos(x, y);
cout<<ch;
y++;
}
}
//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawCol(COORD a, COORD b, char ch)
{
if(a.X == b.X) drawCol(a.X, a.Y, b.Y, ch);
else {
SetPos(0, 25);
cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
system("pause");
}
}
//左上角坐标、右下角坐标、用row填充行、用col填充列
void drawFrame(COORD a, COORD b, char row, char col)
{
drawRow(a.Y, a.X+1, b.X-1, row);
drawRow(b.Y, a.X+1, b.X-1, row);
drawCol(a.X, a.Y+1, b.Y-1, col);
drawCol(b.X, a.Y+1, b.Y-1, col);
}
void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
{
COORD a={x1, y1};
COORD b={x2, y2};
drawFrame(a, b, row, col);
}
void drawFrame(Frame frame, char row, char col)
{
COORD a = frame.position[0];
COORD b = frame.position[1];
drawFrame(a, b, row, col);
}
void drawPlaying()
{
drawFrame(0, 0, 48, 24, '=', '|');// draw map frame;
drawFrame(49, 0, 79, 4, '-', '|');// draw output frame
drawFrame(49, 4, 79, 9, '-', '|');// draw score frame
drawFrame(49, 9, 79, 20, '-', '|');// draw operate frame
drawFrame(49, 20, 79, 24, '-', '|');// draw other message frame
SetPos(52, 6);
cout<<"得分:";
SetPos(52, 7);
cout<<"称号:";
SetPos(52,10);
cout<<"操作方式:";
SetPos(52,12);
cout<<" a,s,d,w 控制战机移动。";
SetPos(52,14);
cout<<" p 暂停游戏。";
SetPos(52,16);
cout<<" e 退出游戏。";
SetPos(52,18);
cout<<" k 发射火箭。";
}
//在[a, b)之间产生一个随机整数
int random(int a, int b)
{
int c=(rand() % (a-b))+ a;
return c;
}
//在两个坐标包括的矩形框内随机产生一个坐标
COORD random(COORD a, COORD b)
{
int x=random(a.X, b.X);
int y=random(a.Y, b.Y);
COORD c={x, y};
return c;
}
bool judgeCoordInFrame(Frame frame, COORD spot)
{
if(spot.X>=frame.position[0].X)
if(spot.X<=frame.position[1].X)
if(spot.Y>=frame.position[0].Y)
if(spot.Y<=frame.position[0].Y)
return true;
return false;
}
void printCoord(COORD a)
{
cout <<"( "<<a.X<<" , "<<a.Y<<" )";
}
void printFrameCoord(Frame a)
{
printCoord(a.position[0]);
cout <<" - ";
printCoord(a.position[1]);
}
int drawMenu()
{
SetPos(30, 1);
cout<<"Plane War";
drawRow(3, 0, 79, '-');
drawRow(5, 0, 79, '-');
SetPos(28, 4);
cout<<"w 和 s 选择, k 确定";
SetPos(15, 11);
cout<<"1. 简单的敌人";
SetPos(15, 13);
cout<<"2. 冷酷的敌人";
drawRow(20, 0, 79, '-');
drawRow(22, 0, 79, '-');
SetPos(47, 11);
cout<<"简单的敌人:";
SetPos(51, 13);
cout<<"简单敌人有着较慢的移动速度。";
int j=11;
cout<<">>";
while(1) {
if( _kbhit() ) {
char x=_getch();
switch (x) {
case 'w' : {
if( j == 13) {
SetPos(12, j);
cout<<" ";
j = 11;
SetPos(12, j);
cout<<">>";
SetPos(51, 13);
cout<<" ";
SetPos(47, 11);
cout<<"简单的敌人:";
SetPos(51, 13);
cout<<"简单的敌人有着较慢的移动速度。";
}
break;
}
case 's' : {
if( j == 11 ) {
SetPos(12, j);
cout<<" ";
j = 13;
SetPos(12, j);
cout<<">>";
SetPos(51, 13);
cout<<" ";
SetPos(47, 11);
cout<<"冷酷的敌人:";
SetPos(51, 13);
cout<<"冷酷的敌人有着较快的移动速度。";
}
break;
}
case 'k' : {
if (j == 8) return 1; else return 2;
}
}
}
}
}
/*================== the Game Class ==================*/
class Game
{
public:
COORD position[10];
COORD bullet[10];
Frame enemy[8];
int score;
int rank;
int rankf;
string title;
int flag_rank;
Game ();
//初始化所有
void initPlane();
void initBullet();
void initEnemy();
//初始化其中一个
//void initThisBullet( COORD );
//void initThisEnemy( Frame );
void planeMove(char);
void bulletMove();
void enemyMove();
//填充所有
void drawPlane();
void drawPlaneToNull();
void drawBullet();
void drawBulletToNull();
void drawEnemy();
void drawEnemyToNull();
//填充其中一个
void drawThisBulletToNull( COORD );
void drawThisEnemyToNull( Frame );
void Pause();
void Playing();
void judgePlane();
void judgeEnemy();
void Shoot();
void GameOver();
void printScore();
};
Game::Game()
{
initPlane();
initBullet();
initEnemy();
score = 0;
rank = 25;
rankf = 0;
flag_rank = 0;
}
void Game::initPlane()
{
COORD centren={39, 22};
position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
position[1].X=centren.X-2;
position[2].X=position[6].X=centren.X-1;
position[3].X=position[8].X=centren.X+1;
position[4].X=centren.X+2;
for(int i=0; i<=4; i++)
position[i].Y=centren.Y;
for(int i=6; i<=8; i++)
position[i].Y=centren.Y+1;
position[5].Y=centren.Y-1;
position[9].Y=centren.Y-2;
}
void Game::drawPlane()
{
for(int i=0; i<9; i++)
{
SetPos(position[i]);
if(i!=5)
cout<<"O";
else if(i==5)
cout<<"|";
}
}
void Game::drawPlaneToNull()
{
for(int i=0; i<9; i++)
{
SetPos(position[i]);
cout<<" ";
}
}
void Game::initBullet()
{
for(int i=0; i<10; i++)
bullet[i].Y = 30;
}
void Game::drawBullet()
{
for(int i=0; i<10; i++)
{
if( bullet[i].Y != 30)
{
SetPos(bullet[i]);
cout<<"^";
}
}
}
void Game::drawBulletToNull()
{
for(int i=0; i<10; i++)
if( bullet[i].Y != 30 )
{
COORD pos={bullet[i].X, bullet[i].Y+1};
SetPos(pos);
cout<<" ";
}
}
void Game::initEnemy()
{
COORD a={1, 1};
COORD b={45, 15};
for(int i=0; i<8; i++)
{
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
}
}
void Game::drawEnemy()
{
for(int i=0; i<8; i++)
drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
}
void Game::drawEnemyToNull()
{
for(int i=0; i<8; i++)
{
drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
}
}
void Game::Pause()
{
SetPos(61,2);
cout<<" ";
SetPos(61,2);
cout<<"暂停中...";
char c=_getch();
while(c!='p')
c=_getch();
SetPos(61,2);
cout<<" ";
}
void Game::planeMove(char x)
{
if(x == 'a')
if(position[1].X != 1)
for(int i=0; i<=9; i++)
position[i].X -= 2;
if(x == 's')
if(position[7].Y != 23)
for(int i=0; i<=9; i++)
position[i].Y += 1;
if(x == 'd')
if(position[4].X != 47)
for(int i=0; i<=9; i++)
position[i].X += 2;
if(x == 'w')
if(position[5].Y != 3)
for(int i=0; i<=9; i++)
position[i].Y -= 1;
}
void Game::bulletMove()
{
for(int i=0; i<10; i++)
{
if( bullet[i].Y != 30)
{
bullet[i].Y -= 1;
if( bullet[i].Y == 1 )
{
COORD pos={bullet[i].X, bullet[i].Y+1};
drawThisBulletToNull( pos );
bullet[i].Y=30;
}
}
}
}
void Game::enemyMove()
{
for(int i=0; i<8; i++)
{
for(int j=0; j<2; j++)
enemy[i].position[j].Y++;
if(24 == enemy[i].position[1].Y)
{
COORD a={1, 1};
COORD b={45, 3};
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
}
}
}
void Game::judgePlane()
{
for(int i = 0; i < 8; i++)
for(int j=0; j<9; j++)
if(judgeCoordInFrame(enemy[i], position[j]))
{
SetPos(62, 1);
cout<<"坠毁";
drawFrame(enemy[i], '+', '+');
Sleep(1000);
GameOver();
break;
}
}
void Game::drawThisBulletToNull( COORD c)
{
SetPos(c);
cout<<" ";
}
void Game::drawThisEnemyToNull( Frame f )
{
drawFrame(f, ' ', ' ');
}
void Game::judgeEnemy()
{
for(int i = 0; i < 8; i++)
for(int j = 0; j < 10; j++)
if( judgeCoordInFrame(enemy[i], bullet[j]) )
{
score += 5;
drawThisEnemyToNull( enemy[i] );
COORD a={1, 1};
COORD b={45, 3};
enemy[i].position[0] = random(a, b);
enemy[i].position[1].X = enemy[i].position[0].X + 3;
enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
drawThisBulletToNull( bullet[j] );
bullet[j].Y = 30;
}
}
void Game::Shoot()
{
for(int i=0; i<10; i++)
if(bullet[i].Y == 30)
{
bullet[i].X = position[5].X;
bullet[i].Y = position[5].Y-1;
break;
}
}
void Game::printScore()
{
if(score == 120 && flag_rank == 0)
{
rank -= 3;
flag_rank = 1;
}
else if( score == 360 && flag_rank == 1)
{
rank -= 5;
flag_rank = 2;
}
else if( score == 480 && flag_rank == 2)
{
rank -= 5;
flag_rank = 3;
}
int x=rank/5;
SetPos(60, 6);
cout<<score;
if( rank!=rankf )
{
SetPos(60, 7);
if( x == 4)
title="初级飞行员";
else if( x == 3)
title="中级飞行员";
else if( x == 2)
title="高级飞行员";
else if( x == 3 )
title="王牌飞行员";
cout<<title;
}
rankf = rank;
}
void Game::Playing()
{
//HANDLE MFUN;
//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL);
drawEnemy();
drawPlane();
int flag_bullet = 0;
int flag_enemy = 0;
while(1)
{
Sleep(8);
if(_kbhit())
{
char x = _getch();
if ('a' == x || 's' == x || 'd' == x || 'w' == x)
{
drawPlaneToNull();
planeMove(x);
drawPlane();
judgePlane();
}
else if ('p' == x)
Pause();
else if( 'k' == x)
Shoot();
else if( 'e' == x)
{
//CloseHandle(MFUN);
GameOver();
break;
}
}
/* 处理子弹 */
if( 0 == flag_bullet )
{
bulletMove();
drawBulletToNull();
drawBullet();
judgeEnemy();
}
flag_bullet++;
if( 5 == flag_bullet )
flag_bullet = 0;
/* 处理敌人 */
if( 0 == flag_enemy )
{
drawEnemyToNull();
enemyMove();
drawEnemy();
judgePlane();
}
flag_enemy++;
if( flag_enemy >= rank )
flag_enemy = 0;
/* 输出得分 */
printScore();
}
}
void Game::GameOver()
{
system("cls");
COORD p1={28,9};
COORD p2={53,15};
drawFrame(p1, p2, '=', '|');
SetPos(36,12);
string str="Game Over!";
for(int i=0; i<str.size(); i++)
{
Sleep(80);
cout<<str[i];
}
Sleep(1000);
system("cls");
drawFrame(p1, p2, '=', '|');
SetPos(31, 11);
cout<<"击落敌机:"<<score/5<<" 架";
SetPos(31, 12);
cout<<"得 分:"<<score;
SetPos(31, 13);
cout<<"获得称号:"<<title;
SetPos(30, 16);
Sleep(1000);
cout<<"继续? 是(y)| 否(n)";
as:
char x=_getch();
if (x == 'n')
exit(0);
else if (x == 'y')
{
system("cls");
Game game;
int a = drawMenu();
if(a == 2)
game.rank = 20;
system("cls");
drawPlaying();
game.Playing();
}
else goto as;
}
/*================== the main function ==================*/
int main()
{
cout << string(13, '\n');
cout << string(50, ' ') << "Game Loading" << endl << ".";
Sleep(500);
cout << "\t.";
Sleep(500);
cout << "\t\t.";
Sleep(500);
cout << "\t\t\t.";
Sleep(500);
cout << "\t\t\t.";
Sleep(500);
cout << "\t\t.";
Sleep(500);
cout << "\t\t.";
Sleep(500);
cout << "\t.";
Sleep(2000);
system("cls");
//游戏准备
srand((int)time(0)); //随机种子
HideCursor(); //隐藏光标
Game game;
int a = drawMenu();
if(a == 2)
game.rank = 20;
system("cls");
drawPlaying();
game.Playing();
}
three.
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <cstring>
#include <cstdio>
#include <iostream>
#define N 22
using namespace std;
int gameover;
int x1, y1; // 随机出米
int x,y;
long start;
//=======================================
//类的实现与应用initialize a
//=======================================
//下面定义贪吃蛇的坐标类
class snake_position
{
public:
int x,y; //x表示行,y表示列
snake_position(){};
void initialize(int &);//坐标初始化
};
snake_position position[(N-2)*(N-2)+1]; //定义贪吃蛇坐标类数组,有(N-2)*(N-2)个坐标
void snake_position::initialize(int &j)
{
x = 1;
y = j;
}
//下面定义贪吃蛇的棋盘图
class snake_map
{
private:
char s[N][N];//定义贪吃蛇棋盘,包括墙壁。
int grade, length;
int gamespeed; //前进时间间隔
char direction; // 初始情况下,向右运动
int head,tail;
int score;
bool gameauto;
public:
snake_map(int h=4,int t=1,int l=4,char d=77,int s=0):length(l),direction(d),head(h),tail(t),score(s){}
void initialize(); //初始化函数
void show_game();
int updata_game();
void setpoint();
void getgrade();
void display();
};
//定义初始化函数,将贪吃蛇的棋盘图进行初始化
void snake_map::initialize()
{
int i,j;
for(i=1;i<=3;i++)
s[1][i] = '*';
s[1][4] = '#';
for(i=1;i<=N-2;i++)
for(j=1;j<=N-2;j++)
s[i][j]=' '; // 初始化贪吃蛇棋盘中间空白部分
for(i=0;i<=N-1;i++)
s[0][i] = s[N-1][i] = '☆★'; //初始化贪吃蛇棋盘上下墙壁
for(i=1;i<=N-2;i++)
s[i][0] = s[i][N-1] = '■'; //初始化贪吃蛇棋盘左右墙壁
}
//============================================
//输出贪吃蛇棋盘信息
void snake_map::show_game()
{
system("cls"); // 清屏
int i,j;
cout << endl;
for(i=0;i<N;i++)
{
cout << '\t';
for(j=0;j<N;j++)
cout<<s[i][j]<<' '; // 输出贪吃蛇棋盘
if(i==2) cout << "\t等级:" << grade;
if(i==6) cout << "\t速度:" << gamespeed;
if(i==10) cout << "\t得分:" << score << "分" ;
if(i==14) cout << "\t暂停:按一下空格键" ;
if(i==18) cout << "\t继续:按两下空格键" ;
cout<<endl;
}
}
//输入选择等级
void snake_map::getgrade()
{
cin>>grade;
while( grade>7 || grade<1 )
{
cout << "请输入数字1-7选择等级,输入其他数字无效" << endl;
cin >> grade;
}
switch(grade)
{
case 1: gamespeed = 1000;gameauto = 0;break;
case 2: gamespeed = 800;gameauto = 0;break;
case 3: gamespeed = 600;gameauto = 0;break;
case 4: gamespeed = 400;gameauto = 0;break;
case 5: gamespeed = 200;gameauto = 0;break;
case 6: gamespeed = 100;gameauto = 0;break;
case 7: grade = 1;gamespeed = 1000;gameauto = 1;break;
}
}
//输出等级,得分情况以及称号
void snake_map::display()
{
cout << "\n\t\t\t\t等级:" << grade;
cout << "\n\n\n\t\t\t\t速度:" << gamespeed;
cout << "\n\n\n\t\t\t\t得分:" << score << "分" ;
}
//随机产生米
void snake_map::setpoint()
{
srand(time(0));
do
{
x1 = rand() % (N-2) + 1;
y1 = rand() % (N-2) + 1;
}while(s[x1][y1]!=' ');
s[x1][y1]='*';
}
char key;
int snake_map::updata_game()
{
gameover = 1;
key = direction;
start = clock();
while((gameover=(clock()-start<=gamespeed))&&!kbhit());
//如果有键按下或时间超过自动前进时间间隔则终止循环
if(gameover)
{
getch();
key = getch();
}
if(key == ' ')
{
while(getch()!=' '){};//这里实现的是按空格键暂停,按空格键继续的功能,但不知为何原因,需要按两下空格才能继续。这是个bug。
}
else
direction = key;
switch(direction)
{
case 72: x= position[head].x-1; y= position[head].y;break; // 向上
case 80: x= position[head].x+1; y= position[head].y;break; // 向下
case 75: x= position[head].x; y= position[head].y-1;break; // 向左
case 77: x= position[head].x; y= position[head].y+1; // 向右
}
if(!(direction==72||direction==80||direction==75 ||direction==77)) // 按键非方向键
gameover = 0;
else if(x==0 || x==N-1 ||y==0 || y==N-1) // 碰到墙壁
gameover = 0;
else if(s[x][y]!=' '&&!(x==x1&&y==y1)) // 蛇头碰到蛇身
gameover = 0;
else if(x==x1 && y==y1)
{ // 吃米,长度加1
length ++;
if(length>=8 && gameauto)
{
length -= 8;
grade ++;
if(gamespeed>=200)
gamespeed -= 200; // 改变贪吃蛇前进速度
else
gamespeed = 100;
}
s[x][y]= '★'; //更新蛇头
s[position[head].x][position[head].y] = '▲'; //吃米后将原先蛇头变为蛇身
head = (head+1) % ( (N-2)*(N-2) ); //取蛇头坐标
position[head].x = x;
position[head].y = y;
show_game();
gameover = 1;
score += grade*20; //加分
setpoint(); //产生米
}
else
{ // 不吃米
s[position[tail].x][position[tail].y]=' ';//将蛇尾置空
tail= (tail+1) % ( (N-2) * (N-2) );//更新蛇尾坐标
s[position[head].x][position[head].y]='*'; //将蛇头更为蛇身
head= (head+1) % ( (N-2) * (N-2) );
position[head].x = x;
position[head].y = y;
s[position[head].x][position[head].y]='#'; //更新蛇头
gameover = 1;
}
return gameover;
}
//====================================
//主函数部分
//====================================
int main()
{
char ctn = 'y';
int nodead;
cout<<"\n\n\n\n\n\t\t\t 欢迎进入贪吃蛇游戏!"<<endl;//欢迎界面;
cout<<"\n\n\n\t\t\t 按任意键马上开始。。。"<<endl;//准备开始;;
getch();
while( ctn=='y' )
{
system("cls"); // 清屏
snake_map snake;
snake.initialize();
cout << "\n\n请输入数字选择游戏等级:" << endl;
cout << "\n\n\n\t\t\t1.等级一:速度 1000 \n\n\t\t\t2.等级二:速度 800 \n\n\t\t\t3.等级三:速度 600 ";
cout << "\n\n\t\t\t4.等级四:速度 400 \n\n\t\t\t5.等级五:速度 200 \n\n\t\t\t6.等级六:速度 100 \n\n\t\t\t7.自动升级模式" << endl;
snake.getgrade();//获取等级
for(int i=1;i<=4;i++)
{
position[i].initialize(i);//初始化坐标
}
snake.setpoint(); // 产生第一个米
do
{
snake.show_game();
nodead = snake.updata_game();
}while(nodead);
system("cls"); //清屏
cout << "\n\n\n\t\t\t\tGameover!\n\n"<<endl;
snake.display();//输出等级/得分情况
cout << "\n\n\n\t\t 是否选择继续游戏?输入 y 继续,n 退出" << endl;
cin >> ctn;
}
return 0;
}
four.
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#define framex 5
#define framey 5
#define wide 20
#define high 20
int i,j,a[2];
//将光标移动到指定位置
void gotoxy(HANDLE hout,int x,int y){
//COORD是WindowsAPI中定义的一种结构,表示一个字符在控制台屏幕上的坐标
COORD pos;
pos.X=x;
pos.Y=y;
//SetConsoleCursorPosition是API中定位光标位置的函数。
SetConsoleCursorPosition(hout,pos);
}
//游戏封面
void cover (HANDLE hout){
gotoxy(hout,framex+wide,framey);
printf("欢迎使用贪吃蛇游戏2.0");
gotoxy(hout,framex+wide,framey+5);
printf("开始游戏前请关闭中文输入法");
gotoxy(hout,framex+wide*2,framey+20);
printf( "游戏制作者:打死也不告诉你");
gotoxy(hout,framex+wide*2,framey+22);
printf("制作时间:2017年13月(#^.^#)");
char a;
a=getchar();
system("cls");
}
//定义蛇的结构体
struct Snake{
int x[100];
int y[100];
int speed;
int length;
int count;
};
//定义食物的结构体
struct Food{
int x;
int y;
};
//制作框架
void makeframe(struct Snake snake){
//定义显示器变量句柄
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
gotoxy(hout,framex+wide*2+5,framey);
printf( " 贪吃蛇游戏");
gotoxy(hout,framex+wide*2+5,framey+3);
printf("使用方向键或wasd移动");
gotoxy(hout,framex+wide*2+5,framey+5);
printf("长按方向键可加速");
gotoxy(hout,framex+wide*2+5,framey+7);
printf("按任意键暂停,方向键继续");
//打印上边框
for(i=0;i<wide*2+1;i++){
gotoxy(hout,framex+i,framey);
printf("*");
}
//打印下边框
for(i=0;i<wide*2+2;i++){
gotoxy(hout,framex+i,framey+high);
printf("△");
}
//打印左边框
for(i=0;i<high;i++){
gotoxy(hout,framex,framey+i);
printf("☆");
}
//打印右边框
for(i=0;i<high;i++){
gotoxy(hout,framex+wide*2+1,framey+i);
printf("☆");
}
}
//游戏信息
void infor(HANDLE hout,struct Snake* snake){
gotoxy(hout,framex+wide*2+5,framey+15);
printf("当前速度:%d",-snake->speed+500);
gotoxy(hout,framex+wide*2+5,framey+17);
printf("当前得分:%d",snake->count);
gotoxy(hout,framex+wide*2+5,framey+19);
printf("当前长度:%d",snake->length);
}
//初始化蛇
void initsnake(struct Snake *snake){
snake->x[0]=framex+2;
snake->y[0]=framey+high/2;
snake->count=0;
snake->length=3;
snake->speed=400;
//初始化由蛇尾至蛇头的坐标
for(i=1;i<snake->length;i++){
snake->x[i]=snake->x[i-1]+1;
snake->y[i]=snake->y[i-1];
}
}
//打印蛇
void printsnake(HANDLE hout ,struct Snake *snake){
for(i=0;i<snake->length;i++){
gotoxy(hout,snake->x[i],snake->y[i]);
if(i==snake->length-1)
printf("■");
else if(i==0)
printf("★");
else
printf("◆");
}
}
//移动蛇
void movesnake(HANDLE hout,struct Snake *snake){
gotoxy(hout,snake->x[0],snake->y[0]);
//清除蛇尾
printf(" ");
//蛇的后一节坐标变成前一节的坐标
for(i=1;i<snake->length;i++){
snake->x[i-1]=snake->x[i];
snake->y[i-1]=snake->y[i];
}
}
//打印食物
void printfood (HANDLE hout,struct Snake *snake,struct Food* food){
//用计算机时间获取随机值
srand((unsigned)time(NULL));
while(1){
//将食物的横纵坐标的大小限定在窗口大小内
food->x=rand()%(wide-2)+1;
food->y=rand()%(high-2)+1;
//避免食物出现在边框上
if(food->x==0&&food->y==0)
continue;
//将食物的坐标放置在窗口内
food->x=2*food->x+framex;
food->y+=framey;
//如果食物出现在蛇上,重新产生食物
for(i=0;i<snake->length;i++){
if(food->x==snake->x[i]&&food->y==snake->y[i])
break;
}
//食物不在蛇上,打印食物,结束循环
if(i==snake->length){
gotoxy(hout,food->x,food->y);
printf("*");
break;
}
}
}
//吃食物
void eatfood(HANDLE hout,struct Snake * snake,struct Food *food){
//如果蛇头的坐标等于食物的坐标
if(snake->x[snake->length-1]==food->x&&snake->y[snake->length-1]==food->y){
//蛇长加一
snake->length++;
//蛇身(不包括蛇尾)整体像前移动一格
for(i=snake->length-1;i>0;i--){
snake->x[i]=snake->x[i-1];
snake->y[i]=snake->y[i-1];
}
//得到蛇尾的坐标(即蛇移动前的蛇尾坐标)
snake->x[0]=a[0];
snake->y[0]=a[1];
printfood(hout,snake,food);
snake->count++;
if(snake->count%3==0)
snake->speed-=50;
}
}
//死亡判断
int ifdead(struct Snake* snake){
//如果碰到左边界 返回0;
if(snake->x[snake->length-1]==framex)
return 0;
//如果碰到右边界 返回0;
if(snake->x[snake->length-1]==framex+wide*2)
return 0;
//如果碰到上边界 返回0;
if(snake->y[snake->length-1]==framey)
return 0;
//如果碰到下边界 返回0;
if(snake->y[snake->length-1]==framey+high)
return 0;
//如果碰到自己身体 返回0;
for(i=0; i<snake->length-1; i++)
if( snake->x[snake->length-1]==snake->x[i] && snake->y[snake->length-1]==snake->y[i] )
return 0;
//否则返回1;
return 1;
}
//开始游戏
int main(){
unsigned char ch =77;
//定义显示器句柄
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
cover(hout);
struct Snake s, *snake=&s;
struct Food f, *food=&f;
makeframe(*snake);
initsnake(snake);
printfood(hout,snake,food);
Sleep(500);
while(1){
infor(hout,snake);
//保存蛇尾横纵坐标
a[0]=snake->x[0];
a[1]=snake->y[0];
j=0;
//如果用户敲击键盘
if(kbhit()){
//用ch接收输入 ,注意是getch(),不需敲击回车
ch=getch();
if(kbhit()){
//长按时间
Sleep(20);
j=1;
}
}
switch(ch){
//向上移动
case'W':
case 'w' :
case 72:{
movesnake(hout,snake);
//蛇头纵坐标减一
snake->y[snake->length-1]-=1;
break;
}
//向下移动
case'S':
case 's':
case 80:{
movesnake(hout,snake);
//蛇头纵坐标加一
snake->y[snake->length-1]+=1;
break;
}
//向左移动
case'A':
case 'a':
case 75:{
movesnake(hout,snake);
//蛇头横坐标减二
snake->x[snake->length-1]-=2;
break;
}
//向右移动
case'D':
case 'd':
case 77:{
movesnake(hout,snake);
//蛇头横坐标加二
snake->x[snake->length-1]+=2;
break;
}
}
eatfood(hout,snake,food);
printsnake(hout,snake);
//如果判断蛇死亡,跳出循环
if(ifdead(snake)==0||ch==27||snake->speed==0){
gotoxy(hout,framex+wide/2,framey-2);
if(snake->speed==0)
printf("恭喜你通关了!!!");
else
printf("糟糕 T_T");
break;
}
if(j==0)
//如果没有长按,蛇滞留的时间为
Sleep(snake->speed);
//如果长按,蛇滞留的时间为 20ms,即加速
else
Sleep(20);
}
//跳出循环时 ,滞留死亡场景一段时间
Sleep(3000);
//清屏
system("cls");
//显示结束界面
if(snake->speed==0)
printf("\n\n\n\n\n\t\t\t哈哈,你赢了\n\n\t\t\t你得到了满分:24\n\n\n");
else
printf("\n\n\n\n\n\t\t\t哈哈,你输了\n\n\t\t\t你的最终得分是:%d\n\n\n",snake->count);
Sleep(3000);
return 0;
}
five.
#include <iostream>
#include <list>
#include <cstdio>
#include <string>
#include <vector>
#include <ctime>
#include <algorithm>
#include <conio.h>
#include <windows.h>
using namespace std;
class Node {
public:
int x, y;
Node(int x1, int y1);
};
class UserData {
public:
string name;
long long score;
int gt;
int gr;
UserData(string s, long long sc,int gametime,int grade);
friend bool operator < (UserData a, UserData b);
};
#define RIGHT 0x4d
#define LEFT 0x4b
#define UP 0x48
#define DOWN 0x50
#define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY
#define RED FOREGROUND_RED | FOREGROUND_INTENSITY
const int STARTX = 8;
const int STARTY = 4;
const int RANGEX = 60;
const int RANGEY = 20;
int point=10;
const int ENDX = STARTX + RANGEX;
const int ENDY = STARTY + RANGEY;
bool isSnake[RANGEY + 10 ][RANGEX + 10];
int speed;
int sysj;
int gametime;
list<Node> snake;
int curDiraction; //蛇的当前前进方向, 1上, 2下, 3左, 4右
int score; //当前分数
int grade;
int snakeLen; //蛇的长度
int foodx, foody; //食物坐标
int gox, goy; //蛇头坐标
int mj;
void GoTo(short x, short y); //定位光标
void DrawBoard(); //绘制边框
void ShowInformation(); //展示游戏信息
void Init(); //初始化游戏
void RunSnake(int x, int y); //绘制蛇身
void Try(int& x, int& y); //试走
bool IsGoodCoord(int x, int y); //前进坐标是否合法
void AddFood(); //增加食物
void EartFood(); //吃食物
void InitSnake(); //初始化蛇身
bool EndGame(); //结束游戏
bool StartGame(); //启动游戏
bool GameMenu(); //游戏菜单
void ShowRanking(); //排行榜
void ShowAbout(); //相关信息
void InputData(); //输入玩家名字
int main() {
system("title 贪吃蛇小游戏 by 李凯昱");
while (true) {
if (!GameMenu()) return 0;
}
return 0;
}
Node::Node(int x1, int y1) { //构造Node对象
x = x1; y = y1;
}
bool operator < (UserData a, UserData b) { //重载运算符,按分数由大到小排列
if(a.score != b.score)
return a.score > b.score;
if(a.gt !=b.gt)
return a.gt > b.gt;
else
return a.gr > b.gr;
}
UserData::UserData(string s, long long sc,int gametime_,int _grade) { //构造UserData对象
name = s; score = sc; gt=gametime_; gr=_grade;
}
void color(WORD A)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), A);
}
void Color(int score_)
{
if(score_%4==1)
{
color(PURPLE);
}
else if(score_%4==2)
{
color(RED);
}
else if(score_%4==3)
{
color(YELLOW);
}
else if(score_%4==0)
{
color(CYAN);
}
}
void GoTo(short x, short y) { //定位光标
COORD coord = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void ShowInformation() { //输出游戏信息
color(YELLOW);
GoTo(78, 5);
printf("贪吃蛇游戏");
GoTo(78,18);
gametime=(clock()-mj)/1000;
grade=snakeLen-3;
printf("生存时间:%3d 秒",(clock()-mj)/1000);
GoTo(78, 8);
printf("游戏规则:");
GoTo(78, 10);
printf("请按 ↑ ↓ ← → 来控制您的蛇吃东西");
GoTo(78, 12);
printf("吃的越多,蛇就越长,您的等级也将越高");
GoTo(78, 14);
printf("当蛇吃到自己或撞上墙时,游戏结束。");
GoTo(78,16);
printf("自动前进时间:%3dms",speed);
GoTo(78, 20);
printf("当前等级: %8d", snakeLen-3);
GoTo(78, 23);
printf("您的分数: %d", score);
color(CYAN);
printf("+%d=%d",score/3,score*3/2);
color(YELLOW);
GoTo(78,25);
printf("剩余时间:%d秒",10+(snakeLen-3)*4-gametime);
sysj=10+(snakeLen-3)*4-gametime;
}
void DrawBoard() { //绘制墙体
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得输出句柄
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; //光标信息
SetConsoleCursorInfo(hOut, &cursor_info); //隐藏光标
COORD size = { 120, 30 };
SetConsoleScreenBufferSize(hOut, size); //重设缓冲区大小
SMALL_RECT rc = { 0 , 0, 120, 30 };
SetConsoleWindowInfo(hOut, true, &rc); //重设窗口大小
SetConsoleTextAttribute(hOut, CYAN);
for (int i = STARTX - 2; i <= ENDX + 2; i += 2) { //横向墙体
GoTo(i, STARTY - 1);
printf("■");
GoTo(i, ENDY + 1);
printf("■");
}
for (int i = STARTY - 1; i <= ENDY + 1; ++i) { //竖向墙体
GoTo(STARTX - 2, i);
printf("■");
GoTo(ENDX + 2, i);
printf("■");
}
}
void draw()
{
char m=snakeLen+62;
Color(score);
cout<<"■";
}
void Init() { //初始化游戏
system("cls");
memset(isSnake, 0, sizeof(isSnake));
speed = 200;
curDiraction = 4;
score = 0;
DrawBoard();
InitSnake();
ShowInformation();
AddFood();
mj=clock();
point=10;
sysj=10;
}
void RunSnake(int x, int y) { //绘制蛇身
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
score += snakeLen + 1;
if (x == foodx && y == foody) {
EartFood();
AddFood();
return;
}
snake.push_front(Node(x, y));
isSnake[y][x] = true;
GoTo(x, y);
draw();
Node back = snake.back();
snake.pop_back();
isSnake[back.y][back.x] = false;
GoTo(back.x, back.y);
printf(" ");
}
void Try(int& x, int& y) { //试走
int key, cnt = 100;
while (cnt--) { //多次检测键盘状态
if (_kbhit()) {
key = getch();
switch (key) {
case UP:
if (curDiraction == 1 || curDiraction == 2) break;
--y; curDiraction = 1; return;
case DOWN:
if (curDiraction == 1 || curDiraction == 2) break;
++y; curDiraction = 2; return;
case LEFT:
if (curDiraction == 3 || curDiraction == 4) break;
x -= 2; curDiraction = 3; return;
case RIGHT:
if (curDiraction == 3 || curDiraction == 4) break;
x += 2; curDiraction = 4; return;
}
}
}
if (curDiraction == 1) --y; //用户没有输入时
else if (curDiraction == 2) ++y;
else if (curDiraction == 3) x -= 2;
else x += 2;
}
bool IsGoodCoord(int x, int y) { //判断光标是否合法
if (x <= ENDX && y <= ENDY && x >= STARTX && y >= STARTY)
return true;
else
return false;
}
void AddFood() { //增加食物
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);
srand((unsigned)time(NULL));
while (true) {
foodx = (rand()%ENDX) + 1;
foody = (rand()%ENDY) + 1;
if (foodx&1) foodx++;
if (!isSnake[foody][foodx] && IsGoodCoord(foodx, foody)) break;
}
GoTo(foodx, foody);
int a=rand()%5;
if(a>=4)
printf("★");
else if(a<=1)
printf("○");
else
printf("▲");
}
void EartFood() { //吃东西
point+=4;
int sb=gametime=(clock()-mj)/1000;
sysj=point-sb;
score+=score/2;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
snake.push_front(Node(foodx, foody));
isSnake[foody][foodx] = true;
++snakeLen;
if (speed >= 55) speed -= 5;
GoTo(foodx, foody);
draw();
AddFood();
}
void InitSnake() { //初始化蛇身
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
snakeLen = 3, gox = 18, goy = 14;
snake.clear();
snake.push_front(Node(12, 14));
snake.push_front(Node(14, 14));
snake.push_front(Node(16, 14));
for (int i = 12; i <= 16; i += 2) {
GoTo(i, 14);
draw();
isSnake[14][i] = true;
}
}
bool EndGame() { //结束游戏
system("cls");
DrawBoard();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
GoTo(28, 10);
printf("您的本局游戏得分: %d分", score);
GoTo(32, 18);
printf("....你挂了....");
GoTo(27, 20);
printf("是否继续游戏: 是(1), 否(0)");
GoTo(27, 22);
char key = getch();
while (true) {
if (key == '1') return false;
else if (key == '0')
{GoTo(ENDX+1,ENDY+2);
exit(0);return true;
}
else key = getch();
}
}
bool StartGame() { //启动游戏
Init();
while (IsGoodCoord(gox, goy) && !isSnake[goy][gox]&&sysj>0) { //当试走合法时
RunSnake(gox, goy);
ShowInformation();
Try(gox, goy);
Sleep(speed);
}
InputData();
return true;
}
bool GameMenu() { //游戏菜单
system("cls");
DrawBoard();
GoTo(STARTX + 22, STARTY + 4);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
printf("欢迎进入贪吃蛇游戏!");
GoTo(STARTX + 24, STARTY + 10);
printf("1: 新游戏");
GoTo(STARTX + 24, STARTY + 12);
printf("2: 排行榜");
GoTo(STARTX + 24, STARTY + 14);
printf("3: 关于游戏");
GoTo(STARTX + 24, STARTY + 16);
printf("4: 退出游戏");
while (true) {
if (_kbhit()) {
char key = getch();
switch (key) {
case '1':
if (!StartGame()) return false;
else return true;
case '2':
ShowRanking(); return true;
case '3':
ShowAbout(); return true;
case '4':
GoTo(1,ENDY+2);
return false;
default:
return true;
}
}
}
}
void ShowRanking() { //展示排行榜
vector<UserData> vu;
FILE *fp = fopen("GameData.txt", "r");
if (fp == NULL) fp = fopen("GameData.txt", "w+");
char name[20];
int len = 0;
while (fscanf(fp, "%s", name) != EOF) {
++len;
int score,g=grade;
fscanf(fp, "%d%d%d%*c", &score,&gametime,&g);
vu.push_back(UserData(string(name), score,gametime,grade));
}
fclose(fp);
sort(vu.begin(), vu.end()); //对得分进行排名
system("cls");
DrawBoard();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
GoTo(STARTX + 8, STARTY + 2);
printf("用户");
GoTo(STARTX + 20, STARTY + 2);
printf("分数");
GoTo(STARTX + 32, STARTY + 2);
printf("生存时间");
GoTo(STARTX + 44, STARTY + 2);
printf("排行");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
for (int i = 0; i < len && i < 10; ++i) { //打印前十名用户数据
char const *p = vu[i].name.c_str();
Color(vu[i].score);
GoTo(STARTX + 8, STARTY + 4 + i);
printf("%s", p);
GoTo(STARTX + 20, STARTY + 4 + i);
printf("%d分", vu[i].score);
GoTo(STARTX + 32, STARTY + 4 + i);
printf("%d秒", vu[i].gt);
GoTo(STARTX + 44, STARTY + 4 + i);
printf(" %d", i + 1);
}
GoTo(STARTX + 4, ENDY - 2);
printf("----------------- 按'1'返回游戏菜单 ---------------");
while (true) {
if (_kbhit()) {
char key = getch();
if (key == '1') break;
}
}
}
void ShowAbout() { //展示游戏相关
system("cls");
DrawBoard();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
GoTo(STARTX + 4, STARTY + 2);
printf("------------------- 贪吃蛇游戏 -------------------");
GoTo(STARTX + 10, STARTY + 4);
printf("制作人: ");
GoTo(STARTX + 10, STARTY + 6);
printf("李凯昱");
GoTo(STARTX + 10,STARTY + 8);
printf("贪吃蛇游戏");
GoTo(STARTX + 10,STARTY + 10);
printf("游戏规则:");
GoTo(STARTX + 10,STARTY + 12);
printf("请按 ↑ ↓ ← → 来控制您的蛇吃东西");
GoTo(STARTX + 10,STARTY + 14);
printf("吃的越多,蛇就越长,您的等级也将越高");
GoTo(STARTX + 10,STARTY + 16);
printf("当蛇吃到自己或撞上墙时,游戏结束。");
GoTo(STARTX + 4, ENDY - 2);
printf("----------------- 按'1'返回游戏菜单 ---------------");
while (true) {
if (_kbhit()) {
char key = getch();
if (key == '1') break;
}
}
}
void InputData() { //用户输入名字
char name[20];
if(score>=1000)
{
GoTo(STARTX + 10, STARTY + 10);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), RED);
printf("请输入你的名字: ");
COORD coord = { STARTX + 10, STARTY + 12 };
SetConsoleCursorPosition(GetStdHandle(STD_INPUT_HANDLE), coord);
while (true) { //忽略非法字符
scanf("%s", name);
if (name[0] != 0 && name[0] != ' ') break;
}FILE *fp = fopen("Gamedata.txt", "a");
if (fp == NULL) fp = fopen("GameData.txt", "w+");
fprintf(fp, "%s %d %d \n", name, score,gametime);
fclose(fp);
}
else
{
GoTo(STARTX + 20, STARTY + 10);
cout<<"哟!这分数也能上榜??"<<endl;
Sleep(1000);
}
EndGame();
}
six.
#include<stdio.h>
#include <windows.h>
#include<conio.h>
#include<time.h>
void gotoxy(int x,int y);//控制光标。X表示横坐标,Y表示纵坐标
void my_print();//设置界面
void print_thing();//打印物品
void print_home();//打印老家
void refresh_map();//刷新地图
void stop();//暂停
void print_my_tank();//打印我的坦克
void print_tank_1();//打印坦克1号
void print_tank_2();//打印坦克2号
void print_tank_3();//打印坦克3号
void clear_my_tank();//清除我的坦克,用于坦克移动后
void clear_tank_1();//清除坦克1号
void clear_tank_2();//清除坦克2号
void clear_tank_3();//清除坦克3号
void turn_up(int a[][3]);//我的坦克上转
void turn_down(int a[][3]);//我的坦克下转
void turn_left(int a[][3]);//我的坦克左转
void turn_right(int a[][3]);//我的坦克右转
void turn_up_1(int a[][3]);//坦克1号上转
void turn_down_1(int a[][3]);//坦克1号下转
void turn_left_1(int a[][3]);//坦克1号左转
void turn_right_1(int a[][3]);//坦克1号右转
void turn_up_2(int a[][3]);//坦克2号上转
void turn_down_2(int a[][3]);//坦克2号下转
void turn_left_2(int a[][3]);//坦克2号左转
void turn_right_2(int a[][3]);//坦克2号右转
void turn_up_3(int a[][3]);//坦克3号上转
void turn_down_3(int a[][3]);//坦克3号下转
void turn_left_3(int a[][3]);//坦克3号左转
void turn_right_3(int a[][3]);//坦克3号右转
void my_move();//我的坦克移动
void move_1();//坦克1号移动
void move_2();//坦克2号移动
void move_3();//坦克3号移动
void print_bullet(int x,int y);//打印敌方坦克的子弹
void print_my_bullet(int x,int y);//打印我的子弹
void clear_bullet(int x,int y);//清楚子弹
int check_bullet(int x,int y);//检查子弹是否碰撞,没碰返回1,碰到返回0
void shoot();//计算我的坦克子弹的坐标
void shoot_1();//计算坦克1号子弹的坐标
void shoot_2();//计算坦克2号子弹的坐标
void shoot_3();//计算坦克3号子弹的坐标
void change_thing();//记录物品的变化
void change_home();//记录老家的变化
void change_bullet();//纪录子弹的变化
void change_star();//记录星星的变化
void change_tank();//记录我的坦克的变化
void change_tank_1();//记录坦克1号的变化
void change_tank_2();//记录坦克2号的变化
void change_tank_3();//记录坦克3号的变化
void switch_weapons();//切换武器
void switch_skin();//切换皮肤
void help();//帮助
void check_game();//检查游戏胜负
void check_lv();//检查等级
void next_level();//下一关
void get_map();//获得每一关的地图
void initial();//将所有量初始化
void gameover();//游戏结束
void console();//控制窗口
void screen_1();//屏幕1
void screen_2(char *p,int color);//屏幕2
void screen_3();//屏幕3
void produce_star();//产生一个星星
void print_star();//打印星星
void check_star();//检查星星的数量
void clear_star();//清除星星
int my_abs(int x);//绝对值函数,用系统的会有问题
int judge(int x,int y,int state);//判断我的坦克能否前进
int judge2(int x,int y,int state);// 辅助电脑判断能否前进
int check1(int x,int y);//辅助电脑判断的函数
int check2(int x,int y);//辅助电脑判断的函数
int check3(int x,int y);//辅助电脑判断的函数
int life=3;//生命
int enemy=13;//敌人数量
int level=1;//关卡
int weapons=1;//武器
int skin=1;//皮肤
int star=1;//星星
int s=0,t=0;//星星坐标
int score=0;//分数
int lv=1;//等级
int speed=10;//速度
char *info[5]={" "," "," "," "," "};//通知
int map[30][30]={0};//记录整个屏幕上的物体
int thing[28][28]={0};//障碍物,不包括边界
int home[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//老家,3行4列
int my_tank[3][3]={0};//我的坦克
int tank_1[3][3]={0};//敌人的坦克1号
int tank_2[3][3]={0};//敌人的坦克2号
int tank_3[3][3]={0};//敌人的坦克3号
int x , y ;//我的坦克中心坐标
int x1 , y1;//坦克1号中心坐标
int x2 , y2;//坦克2号中心坐标
int x3 , y3;//坦克3号中心坐标
int m=0 , n=0 ;//我的坦克子弹的坐标
int m1=0 , n1=0;//坦克1号子弹的坐标
int m2=0 , n2=0;//坦克2号子弹的坐标
int m3=0 , n3=0;//坦克3号子弹的坐标
int state=0; //我的坦克方向(1上,2下,3左,4右)
int state_1=0;//坦克1号方向
int state_2=0;//坦克2号方向
int state_3=0;//坦克3号方向
int direction=0;//我的坦克子弹射向
int direction_1=0;//坦克1号子弹射向
int direction_2=0;//坦克2号子弹射向
int direction_3=0;//坦克3号子弹射向
int cp1=2;//辅助电脑判断的变量
int cp2=2;//辅助电脑判断的变量
int cp3=2;//辅助电脑判断的变量
int main()//主函数
{
srand(time(NULL));//设置随机数种子
console();//设置窗口
my_print();//打印边框
initial();//所有量初始化
while(1)
{
int i1,i2,i3,i4,i5,i6,i7;
my_move();//控制我的坦克移动
if(i1++%30==0) //控制敌人坦克速度
move_1();
if(i2++%30==0)
move_2();
if(i3++%30==0)
move_3();
if(i4++%speed==0) //控制子弹速度
shoot();
if(i5++%speed==0)
shoot_1();
if(i6++%speed==0)
shoot_2();
if(i7++%speed==0)
shoot_3();
screen_1();//刷新屏幕
Sleep(30);
}
return 0;
}
//设置光标输出的位置函数
void gotoxy(int x,int y)//X表示横坐标,Y表示纵坐标。
{
HANDLE app;
COORD pos;
pos.X=x;
pos.Y=y;
app=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(app,pos);
}
//控制窗口
void console()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hOut, &bInfo );
SetConsoleTitle("坦克大战"); // 设置窗口的标题
COORD size = {90, 32};//设置窗口大小
SetConsoleScreenBufferSize(hOut,size);
SMALL_RECT rc = {0,0, 63, 31};
SetConsoleWindowInfo(hOut,true ,&rc);
}
//打印边界
void my_print()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE |FOREGROUND_INTENSITY);//蓝色
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ |﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊|\n");
for(int i=0;i<13;i++)
printf("■ ■ | |\n");
printf("■ ■ |--------------------------|\n");
for(int j=14;j<28;j++)
printf("■ ■ | |\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ |﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍|\n");
}
//打印与清除坦克
void print_my_tank()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(my_tank[i][j]==1)
{
switch(skin)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//淡蓝色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//绿色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);//黄色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);//白色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 5 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);//紫色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 6 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
case 7 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);//蓝色
gotoxy(2*x+2*j-2,y+i-1);
printf("■");
}break;
}
}
}
void clear_my_tank()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
gotoxy(2*x+2*j-2,y+i-1);
printf(" ");
}
}
void print_tank_1()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(tank_1[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
gotoxy(2*x1+2*j-2,y1+i-1);
printf("■");
}
}
void clear_tank_1()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
gotoxy(2*x1+2*j-2,y1+i-1);
printf(" ");
}
}
void print_tank_2()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(tank_2[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
gotoxy(2*x2+2*j-2,y2+i-1);
printf("■");
}
}
void clear_tank_2()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
gotoxy(2*x2+2*j-2,y2+i-1);
printf(" ");
}
}
void print_tank_3()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(tank_3[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);// 紫色
gotoxy(2*x3+2*j-2,y3+i-1);
printf("■");
}
}
void clear_tank_3()
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
gotoxy(2*x3+2*j-2,y3+i-1);
printf(" ");
}
}
void print_thing() // 打印物品
{
for(int j=0;j<28;j++) // 从坐标(1,1)点开始打印
for(int i=0;i<28;i++)
if(thing[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(2+2*j,1+i);
printf("■");
}
else if(thing[i][j]==2)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
gotoxy(2+2*j,1+i);
printf("■");
}
else if(thing[i][j]==3)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(2+2*j,1+i);
printf("■");
}
else if(thing[i][j]==4)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
gotoxy(2+2*j,1+i);
printf("■");
}
}
void print_home() //打印老家
{
for(int i=0;i<3;i++) //打印老家外墙
for(int j=0;j<4;j++)
if(home[i][j]==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(26+2*j,26+i);
printf("■");
}
else if(home[i][j]==2)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
gotoxy(26+2*j,26+i);
printf("■");
}
else if(home[i][j]==3)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(26+2*j,26+i);
printf("■");
}
{
for(int i=1;i<3;i++) //打印老家内部
for(int j=1;j<3;j++)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(26+2*j,26+i);
printf("■");
}
}
}
void print_bullet(int x,int y) //打印敌方坦克的子弹子弹
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(2*x,y);
printf("⊕");
}
void print_my_bullet(int x,int y) //打印我的子弹
{
switch(weapons)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(2*x,y);
printf("⊕");
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(2*x,y);
printf("∷");
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(2*x,y);
printf("◎");
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(2*x,y);
printf("※");
}break;
case 5 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(2*x,y);
printf("●");
}break;
}
}
void clear_bullet(int x,int y)
{
gotoxy(2*x,y);
printf(" ");
}
void screen_1()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
gotoxy(62,2);
printf(" 第 %d 关 ",level);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,4);
printf("分数: %d",score);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(80,4);
printf("LV: %d ",lv);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(62,6);
printf("生命: 坦克×%d ",life-1);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,8);
printf("敌方: 坦克×%d ",enemy);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(62,11);
printf("当前武器: ");
switch(weapons)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,13);
printf(" 普通子弹 ⊕ ");
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,13);
printf(" 散弹 ∷ ");
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,13);
printf(" 气泡弹 ◎ ");
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(62,13);
printf(" 雪花弹 ※ ");
}break;
case 5 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,13);
printf(" 超级炮弹 ● ");
}break;
}
}
void screen_2(char *p,int color)
{
for(int i=15;i<27;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
info[0]=info[1];//内容上移
info[1]=info[2];
info[2]=info[3];
info[3]=info[4];
info[4]=p;
for(int j=15;j<22;j=j+2)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,j);
printf("%s",info[(j+1)/2-8]);
}
switch(color)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//绿
gotoxy(62,23);
printf("%s",info[4]);
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//淡蓝
gotoxy(62,23);
printf("%s",info[4]);
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);//黄
gotoxy(62,23);
printf("%s",info[4]);
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红
gotoxy(62,23);
printf("%s",info[4]);
}break;
}
}
void screen_3()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
gotoxy(62,27);
printf(" h键帮助 Esc退出");
gotoxy(62,28);
printf(" ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
if(star<=13)
for(int i=1;i<=star;i++)
{
gotoxy(60+2*i,28);
printf("★");
}
}
void produce_star()
{
int a=0;
for(int i=4;i<26;i++)
{
for(int j=1;j<29;j++)
if(map[i][j]==0 && rand()%300==0)
{
s=j,t=i;
print_star();
a=1;
break;
}
if(a)
break;
}
}
void print_star()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(2*s,t);
printf("★");
}
void change_star()
{
if(s==x&&t==(y-1) || s==x&&t==(y+1) || s==(x-1)&&t==y || s==(x+1)&&t==y)
{
clear_star();
s=0,t=0;
star++;
screen_2("恭喜你获得一颗星星",2);
printf("\7");
check_star();
print_my_tank();
}
if(s==x1&&t==(y1-1) || s==x1&&t==(y1+1) || s==(x1-1)&&t==y1 || s==(x1+1)&&t==y1)
{
clear_star();
s=0,t=0;
screen_2("很遗憾星星被抢走了",4);
printf("\7");
print_tank_1();
}
if(s==x2&&t==(y2-1) || s==x2&&t==(y2+1) || s==(x2-1)&&t==y2 || s==(x2+1)&&t==y2)
{
clear_star();
s=0,t=0;
screen_2("很遗憾星星被抢走了",4);
printf("\7");
print_tank_2();
}
if(s==x3&&t==(y3-1) || s==x3&&t==(y3+1) || s==(x3-1)&&t==y3 || s==(x3+1)&&t==y3)
{
clear_star();
s=0,t=0;
screen_2("很遗憾星星被抢走了",4);
printf("\7");
print_tank_3();
}
}
void clear_star()
{
gotoxy(2*s,t);
printf(" ");
}
void check_star()
{
switch(star)
{
case 2 :screen_2("解锁新武器: 散弹",4),screen_3();break;
case 3 :screen_2("成功解锁 绿色皮肤",2),screen_3();break;
case 4 :screen_2("解锁新武器: 气泡弹",2),screen_3();break;
case 5 :screen_2("成功解锁 黄色皮肤",3),screen_3();break;
case 6 :screen_2("解锁新武器: 雪花弹",1),screen_3();break;
case 7 :screen_2("成功解锁 白色皮肤",1),screen_3();break;
case 8 :screen_2("解锁新武器: 超级炮弹",4),screen_3();break;
case 9 :screen_2("成功解锁 紫色皮肤",1),screen_3();break;
case 10 :screen_2("您已拥有10颗星啦",3),screen_3();break;
case 11 :screen_2("成功解锁 红色皮肤",4),screen_3();break;
case 12 :screen_2("您已拥有12颗星啦",3),screen_3();break;
case 13 :screen_2("成功解锁 蓝色皮肤",1),screen_3();break;
}
}
void switch_weapons()
{
weapons++;
if(weapons>star/2+1)
weapons=1;
if(star==1)
screen_2("当前星星数不足,赶快收集吧",1);
else
{
switch(weapons)
{
case 1 :screen_2("切换到普通子弹",1);break;
case 2 :screen_2("切换到散弹",1);break;
case 3 :screen_2("切换到气泡弹",1);break;
case 4 :screen_2("切换到雪花弹",1);break;
case 5 :screen_2("切换到超级炮弹弹",1);break;
}
}
}
void switch_skin()
{
skin++;
if(skin>(star-1)/2+1)
skin=1;
if(star==1 || star==2)
screen_2("当前星星数不足,赶快收集吧",1);
else
{
switch(skin)
{
case 1 :screen_2("切换到淡蓝色皮肤",1);break;
case 2 :screen_2("切换到绿色皮肤",1);break;
case 3 :screen_2("切换到黄色皮肤",1);break;
case 4 :screen_2("切换到白色皮肤",1);break;
case 5 :screen_2("切换到紫色皮肤",1);break;
case 6 :screen_2("切换到红色皮肤",1);break;
case 7 :screen_2("切换到蓝色皮肤",1);break;
}
}
}
void shoot()
{
if(m!=0 || n!=0)
if(map[n][m]==0)//如果子弹还留在地图上,就清除掉
clear_bullet(m,n);
if(m==0 && n==0)//代表现在场上没有我的坦克的子弹,则重新发射子弹
{
switch(state)
{
case 1 :
{
m=x;
n=y-2;
direction=1;
}break;
case 2 :
{
m=x;
n=y+2;
direction=2;
}break;
case 3 :
{
m=x-2;
n=y;
direction=3;
}break;
case 4 :
{
m=x+2;
n=y;
direction=4;
}break;
}
}
else
{
switch(direction)
{
case 1 :n--;break;
case 2 :n++;break;
case 3 :m--;break;
case 4 :m++;break;
}
}
change_thing();//检查是否击中障碍物
change_home();//检查是否击中老家
change_bullet();//检查是否击中子弹
change_tank_1();//检查是否击中坦克1号
change_tank_2();//检查是否击中坦克2号
change_tank_3();//检查是否击中坦克3号
if(check_bullet(m,n))
print_my_bullet(m,n);
else
m=0,n=0;
}
void shoot_1()
{
if(m1!=0 || n1!=0)
if(map[n1][m1]==0)//如果子弹还留在地图上,就清除掉
clear_bullet(m1,n1);
if(m1==0 && n1==0)//代表现在场上没有坦克1号的子弹,则重新发射子弹
{
switch(state_1)
{
case 1 :
{
m1=x1;
n1=y1-2;
direction_1=1;
}break;
case 2 :
{
m1=x1;
n1=y1+2;
direction_1=2;
}break;
case 3 :
{
m1=x1-2;
n1=y1;
direction_1=3;
}break;
case 4 :
{
m1=x1+2;
n1=y1;
direction_1=4;
}break;
}
}
else
{
switch(direction_1)
{
case 1 :n1--;break;
case 2 :n1++;break;
case 3 :m1--;break;
case 4 :m1++;break;
}
}
change_thing();//检查是否击中障碍物
change_home();//检查是否击中老家
change_bullet();//检查是否击中子弹
change_tank();//检查是否击中我的坦克
if(check_bullet(m1,n1))
print_bullet(m1,n1);
else
m1=0,n1=0;
}
void shoot_2()
{
if(m2!=0 || n2!=0)
if(map[n2][m2]==0)//如果子弹还留在地图上,就清除掉
clear_bullet(m2,n2);
if(m2==0 && n2==0)//代表现在场上没有坦克2号的子弹,则重新发射子弹
{
switch(state_2)
{
case 1 :
{
m2=x2;
n2=y2-2;
direction_2=1;
}break;
case 2 :
{
m2=x2;
n2=y2+2;
direction_2=2;
}break;
case 3 :
{
m2=x2-2;
n2=y2;
direction_2=3;
}break;
case 4 :
{
m2=x2+2;
n2=y2;
direction_2=4;
}break;
}
}
else
{
switch(direction_2)
{
case 1 :n2--;break;
case 2 :n2++;break;
case 3 :m2--;break;
case 4 :m2++;break;
}
}
change_thing();//检查是否击中障碍物
change_home();//检查是否击中老家
change_bullet();//检查是否击中子弹
change_tank();//检查是否击中我的坦克
if(check_bullet(m2,n2))
print_bullet(m2,n2);
else
m2=0,n2=0;
}
void shoot_3()
{
if(m3!=0 || n3!=0)
if(map[n3][m3]==0)//如果子弹还留在地图上,就清除掉
clear_bullet(m3,n3);
if(m3==0 && n3==0)//代表现在场上没有坦克3号的子弹,则重新发射子弹
{
switch(state_3)
{
case 1 :
{
m3=x3;
n3=y3-2;
direction_3=1;
}break;
case 2 :
{
m3=x3;
n3=y3+2;
direction_3=2;
}break;
case 3 :
{
m3=x3-2;
n3=y3;
direction_3=3;
}break;
case 4 :
{
m3=x3+2;
n3=y3;
direction_3=4;
}break;
}
}
else
{
switch(direction_3)
{
case 1 :n3--;break;
case 2 :n3++;break;
case 3 :m3--;break;
case 4 :m3++;break;
}
}
change_thing();//检查是否击中障碍物
change_home();//检查是否击中老家
change_bullet();//检查是否击中子弹
change_tank();//检查是否击中我的坦克
if(check_bullet(m3,n3))
print_bullet(m3,n3);
else
m3=0,n3=0;
}
void turn_up(int a[][3])
{
int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
if(state==1)
{
if(judge(x,y,state))
{
clear_my_tank();
y--;
print_my_tank();
refresh_map();
}
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_up[i][j];
clear_my_tank();
print_my_tank();
state=1;
refresh_map();
}
change_star();
}
void turn_down(int a[][3])
{
int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
if(state==2)
{
if(judge(x,y,state))
{
clear_my_tank();
y++;
print_my_tank();
refresh_map();
}
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_down[i][j];
clear_my_tank();
print_my_tank();
state=2;
refresh_map();
}
change_star();
}
void turn_left(int a[][3])
{
int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
if(state==3)
{
if(judge(x,y,state))
{
clear_my_tank();
x--;
print_my_tank();
refresh_map();
}
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_left[i][j];
clear_my_tank();
print_my_tank();
state=3;
refresh_map();
}
change_star();
}
void turn_right(int a[][3])
{
int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
if(state==4)
{
if(judge(x,y,state))
{
clear_my_tank();
x++;
print_my_tank();
refresh_map();
}
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_right[i][j];
clear_my_tank();
print_my_tank();
state=4;
refresh_map();
}
change_star();
}
void turn_up_1(int a[][3])
{
int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
if(state_1==1)
{
clear_tank_1();
y1--;
print_tank_1();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_up[i][j];
clear_tank_1();
print_tank_1();
state_1=1;
refresh_map();
}
}
void turn_down_1(int a[][3])
{
int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
if(state_1==2)
{
clear_tank_1();
y1++;
print_tank_1();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_down[i][j];
clear_tank_1();
print_tank_1();
state_1=2;
refresh_map();
}
}
void turn_left_1(int a[][3])
{
int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
if(state_1==3)
{
clear_tank_1();
x1--;
print_tank_1();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_left[i][j];
clear_tank_1();
print_tank_1();
state_1=3;
refresh_map();
}
}
void turn_right_1(int a[][3])
{
int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
if(state_1==4)
{
clear_tank_1();
x1++;
print_tank_1();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_right[i][j];
clear_tank_1();
print_tank_1();
state_1=4;
refresh_map();
}
}
void turn_up_2(int a[][3])
{
int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
if(state_2==1)
{
clear_tank_2();
y2--;
print_tank_2();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_up[i][j];
clear_tank_2();
print_tank_2();
state_2=1;
refresh_map();
}
}
void turn_down_2(int a[][3])
{
int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
if(state_2==2)
{
clear_tank_2();
y2++;
print_tank_2();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_down[i][j];
clear_tank_2();
print_tank_2();
state_2=2;
refresh_map();
}
}
void turn_left_2(int a[][3])
{
int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
if(state_2==3)
{
clear_tank_2();
x2--;
print_tank_2();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_left[i][j];
clear_tank_2();
print_tank_2();
state_2=3;
refresh_map();
}
}
void turn_right_2(int a[][3])
{
int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
if(state_2==4)
{
clear_tank_2();
x2++;
print_tank_2();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_right[i][j];
clear_tank_2();
print_tank_2();
state_2=4;
refresh_map();
}
}
void turn_up_3(int a[][3])
{
int tank_up[3][3]={{0,1,0},{1,1,1},{1,0,1}};
if(state_3==1)
{
clear_tank_3();
y3--;
print_tank_3();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_up[i][j];
clear_tank_3();
print_tank_3();
state_3=1;
refresh_map();
}
}
void turn_down_3(int a[][3])
{
int tank_down[3][3]={{1,0,1},{1,1,1},{0,1,0}};
if(state_3==2)
{
clear_tank_3();
y3++;
print_tank_3();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_down[i][j];
clear_tank_3();
print_tank_3();
state_3=2;
refresh_map();
}
}
void turn_left_3(int a[][3])
{
int tank_left[3][3]={{0,1,1},{1,1,0},{0,1,1}};
if(state_3==3)
{
clear_tank_3();
x3--;
print_tank_3();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_left[i][j];
clear_tank_3();
print_tank_3();
state_3=3;
refresh_map();
}
}
void turn_right_3(int a[][3])
{
int tank_right[3][3]={{1,1,0},{0,1,1},{1,1,0}};
if(state_3==4)
{
clear_tank_3();
x3++;
print_tank_3();
refresh_map();
}
else
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[i][j]=tank_right[i][j];
clear_tank_3();
print_tank_3();
state_3=4;
refresh_map();
}
}
int judge(int x,int y,int state)//x,y坦克当前坐标,state坦克当前方向
{
switch(state)
{
case 1 :if(map[y-2][x]==0 && map[y-1][x-1]==0 && map[y-1][x+1]==0 && map[y-2][x-1]==0 && map[y-2][x+1]==0)
return 1;
else
return 0;
case 2 :if(map[y+2][x]==0 && map[y+1][x-1]==0 && map[y+1][x+1]==0 && map[y+2][x-1]==0 && map[y+2][x+1]==0)
return 1;
else
return 0;
case 3 :if(map[y][x-2]==0 && map[y-1][x-1]==0 && map[y+1][x-1]==0 && map[y-1][x-2]==0 && map[y+1][x-2]==0)
return 1;
else
return 0;
case 4 :if(map[y][x+2]==0 && map[y-1][x+1]==0 && map[y+1][x+1]==0 && map[y-1][x+2]==0 && map[y+1][x+2]==0)
return 1;
else
return 0;
}
}
int judge2(int x,int y,int state)//x,y坦克当前坐标,state坦克当前方向
{
switch(state)
{
case 1 :if(map[y-2][x]==0 && map[y-2][x-1]==0 && map[y-2][x+1]==0)
return 1;
else
return 0;
case 2 :if(map[y+2][x]==0 && map[y+2][x-1]==0 && map[y+2][x+1]==0)
return 1;
else
return 0;
case 3 :if(map[y][x-2]==0 && map[y-1][x-2]==0 && map[y+1][x-2]==0)
return 1;
else
return 0;
case 4 :if(map[y][x+2]==0 && map[y-1][x+2]==0 && map[y+1][x+2]==0)
return 1;
else
return 0;
}
}
void refresh_map() //i代表行,即纵坐标;j代表列,即横坐标
{
{
for(int i=0;i<30;i++) //首先地图清零
for(int j=0;j<30;j++)
map[i][j]=0;
}
{
for(int i=0;i<30;i++) //地图第一部分:围墙(完全不动)
{
map[i][0]=1;
map[i][29]=1;
}
for(int j=0;j<30;j++)
{
map[0][j]=1;
map[29][j]=1;
}
}
{
for(int i=0;i<3;i++) //地图第二部分:老家(几乎不动)
for(int j=0;j<4;j++)
map[i+26][j+13]=home[i][j];
}
{
for(int i=0;i<28;i++) //地图第三部分:障碍物(有时改变)
for(int j=0;j<28;j++)
map[i+1][j+1]=thing[i][j];
}
{
switch(state) //地图第四部分:坦克(总是改变)
{
case 1 :
{
map[y-1][x-1]=0; map[y-1][x]=1; map[y-1][x+1]=0;
map[y][x-1]=1; map[y][x]=1; map[y][x+1]=1;
map[y+1][x-1]=1; map[y+1][x]=0; map[y+1][x+1]=1;
}break;
case 2 :
{
map[y-1][x-1]=1; map[y-1][x]=0; map[y-1][x+1]=1;
map[y][x-1]=1; map[y][x]=1; map[y][x+1]=1;
map[y+1][x-1]=0; map[y+1][x]=1; map[y+1][x+1]=0;
}break;
case 3 :
{
map[y-1][x-1]=0; map[y-1][x]=1; map[y-1][x+1]=1;
map[y][x-1]=1; map[y][x]=1; map[y][x+1]=0;
map[y+1][x-1]=0; map[y+1][x]=1; map[y+1][x+1]=1;
}break;
case 4 :
{
map[y-1][x-1]=1; map[y-1][x]=1; map[y-1][x+1]=0;
map[y][x-1]=0; map[y][x]=1; map[y][x+1]=1;
map[y+1][x-1]=1; map[y+1][x]=1; map[y+1][x+1]=0;
}break;
}
switch(state_1)
{
case 1 :
{
map[y1-1][x1-1]=0; map[y1-1][x1]=1; map[y1-1][x1+1]=0;
map[y1][x1-1]=1; map[y1][x1]=1; map[y1][x1+1]=1;
map[y1+1][x1-1]=1; map[y1+1][x1]=0; map[y1+1][x1+1]=1;
}break;
case 2 :
{
map[y1-1][x1-1]=1; map[y1-1][x1]=0; map[y1-1][x1+1]=1;
map[y1][x1-1]=1; map[y1][x1]=1; map[y1][x1+1]=1;
map[y1+1][x1-1]=0; map[y1+1][x1]=1; map[y1+1][x1+1]=0;
}break;
case 3 :
{
map[y1-1][x1-1]=0; map[y1-1][x1]=1; map[y1-1][x1+1]=1;
map[y1][x1-1]=1; map[y1][x1]=1; map[y1][x1+1]=0;
map[y1+1][x1-1]=0; map[y1+1][x1]=1; map[y1+1][x1+1]=1;
}break;
case 4 :
{
map[y1-1][x1-1]=1; map[y1-1][x1]=1; map[y1-1][x1+1]=0;
map[y1][x1-1]=0; map[y1][x1]=1; map[y1][x1+1]=1;
map[y1+1][x1-1]=1; map[y1+1][x1]=1; map[y1+1][x1+1]=0;
}break;
}
switch(state_2)
{
case 1 :
{
map[y2-1][x2-1]=0; map[y2-1][x2]=1; map[y2-1][x2+1]=0;
map[y2][x2-1]=1; map[y2][x2]=1; map[y2][x2+1]=1;
map[y2+1][x2-1]=1; map[y2+1][x2]=0; map[y2+1][x2+1]=1;
}break;
case 2 :
{
map[y2-1][x2-1]=1; map[y2-1][x2]=0; map[y2-1][x2+1]=1;
map[y2][x2-1]=1; map[y2][x2]=1; map[y2][x2+1]=1;
map[y2+1][x2-1]=0; map[y2+1][x2]=1; map[y2+1][x2+1]=0;
}break;
case 3 :
{
map[y2-1][x2-1]=0; map[y2-1][x2]=1; map[y2-1][x2+1]=1;
map[y2][x2-1]=1; map[y2][x2]=1; map[y2][x2+1]=0;
map[y2+1][x2-1]=0; map[y2+1][x2]=1; map[y2+1][x2+1]=1;
}break;
case 4 :
{
map[y2-1][x2-1]=1; map[y2-1][x2]=1; map[y2-1][x2+1]=0;
map[y2][x2-1]=0; map[y2][x2]=1; map[y2][x2+1]=1;
map[y2+1][x2-1]=1; map[y2+1][x2]=1; map[y2+1][x2+1]=0;
}break;
}
switch(state_3)
{
case 1 :
{
map[y3-1][x3-1]=0; map[y3-1][x3]=1; map[y3-1][x3+1]=0;
map[y3][x3-1]=1; map[y3][x3]=1; map[y3][x3+1]=1;
map[y3+1][x3-1]=1; map[y3+1][x3]=0; map[y3+1][x3+1]=1;
}break;
case 2 :
{
map[y3-1][x3-1]=1; map[y3-1][x3]=0; map[y3-1][x3+1]=1;
map[y3][x3-1]=1; map[y3][x3]=1; map[y3][x3+1]=1;
map[y3+1][x3-1]=0; map[y3+1][x3]=1; map[y3+1][x3+1]=0;
}break;
case 3 :
{
map[y3-1][x3-1]=0; map[y3-1][x3]=1; map[y3-1][x3+1]=1;
map[y3][x3-1]=1; map[y3][x3]=1; map[y3][x3+1]=0;
map[y3+1][x3-1]=0; map[y3+1][x3]=1; map[y3+1][x3+1]=1;
}break;
case 4 :
{
map[y3-1][x3-1]=1; map[y3-1][x3]=1; map[y3-1][x3+1]=0;
map[y3][x3-1]=0; map[y3][x3]=1; map[y3][x3+1]=1;
map[y3+1][x3-1]=1; map[y3+1][x3]=1; map[y3+1][x3+1]=0;
}break;
}
}
}
void my_move()
{
char key;
if (kbhit()) //检测,如果有按键就执行if里面的
{
key = getch();//捕获按键
switch( key )
{
case 72:turn_up(my_tank);//上
break;
case 75:turn_left(my_tank);//左
break;
case 77:turn_right(my_tank);//右
break;
case 80:turn_down(my_tank);//下
break;
case 32:stop();//空格 暂停或开始
break;
case 104:help();//小h切换到帮助菜单
break;
case 115:switch_skin(),print_my_tank();//小s键切换皮肤
break;
case 119:switch_weapons();//小w键切换武器
break;
case 27:exit(0);//Esc 退出
default: ;
}
}
}
int check1(int x,int y)//在正上面,用它检测
{
for(int j=y;j<27;j++)
if(map[j][x]==4)
return 0;
return 1;
}
int check2(int x,int y)//在正左面,用它检测
{
for(int i=x;i<14;i++)
if(map[y][i]==4)
return 0;
return 1;
}
int check3(int x,int y)//在正右面,用它检测
{
for(int i=x;i>15;i--)
if(map[y][i]==4)
return 0;
return 1;
}
void move_1()
{
if((x1==14 || x1==15) && check1(x1,y1))//在正上面
{
if(state_1!=2)
turn_down_1(tank_1);
}
else if(x1<14 && y1==27 && check2(x1,y1))//在正左面
{
if(state_1!=4)
turn_right_1(tank_1);
}
else if(x1>15 && y1==27 && check3(x1,y1))//在正右面
{
if(state_1!=3)
turn_left_1(tank_1);
}
else
{
if(judge2(x1,y1,cp1))
switch(cp1)
{
case 1 :turn_up_1(tank_1);break;
case 2 :turn_down_1(tank_1);break;
case 3 :turn_left_1(tank_1);break;
case 4 :turn_right_1(tank_1);break;
}
while(judge2(x1,y1,cp1) == 0)
{
cp1=(rand()%4+1);
}
}
}
void move_2()
{
if((x2==14 || x2==15) && check1(x2,y2))//在正上面
{
if(state_2!=2)
turn_down_2(tank_2);
}
else if(x2<14 && y2==27 && check2(x2,y2))//在正左面
{
if(state_2!=4)
turn_right_2(tank_2);
}
else if(x2>15 && y2==27 && check3(x2,y2))//在正右面
{
if(state_2!=3)
turn_left_2(tank_2);
}
else
{
if(judge2(x2,y2,cp2))
switch(cp2)
{
case 1 :turn_up_2(tank_2);break;
case 2 :turn_down_2(tank_2);break;
case 3 :turn_left_2(tank_2);break;
case 4 :turn_right_2(tank_2);break;
}
while(judge2(x2,y2,cp2) == 0)
{
cp2=(rand()%4+1);
}
}
}
void move_3()
{
if((x3==14 || x3==15) && check1(x3,y3))//在正上面
{
if(state_3!=2)
turn_down_3(tank_3);
}
else if(x3<14 && y3==27 && check2(x3,y3))//在正左面
{
if(state_3!=4)
turn_right_3(tank_3);
}
else if(x3>15 && y3==27 && check3(x3,y3))//在正右面
{
if(state_3!=3)
turn_left_3(tank_3);
}
else
{
if(judge2(x3,y3,cp3))
switch(cp3)
{
case 1 :turn_up_3(tank_3);break;
case 2 :turn_down_3(tank_3);break;
case 3 :turn_left_3(tank_3);break;
case 4 :turn_right_3(tank_3);break;
}
while(judge2(x3,y3,cp3) == 0)
{
cp3=(rand()%4+1);
}
}
}
int check_bullet(int x,int y)
{
if(map[y][x])
return 0;
return 1;
}
void change_thing()//物品被子弹击中会改变
{
if(m>0&&m<29 && n>0&&n<29)//被我的子弹击中
if(thing[n-1][m-1]==1)//打中第一种方块
{
if(weapons==2)
{
if(thing[n][m-1]==1)
thing[n][m-1]=0;
gotoxy(2*m,n+1);
printf(" ");//擦去方块
if(thing[n-2][m-1]==1)
thing[n-2][m-1]=0;
gotoxy(2*m,n-1);
printf(" ");//擦去方块
if(thing[n-1][m]==1)
thing[n-1][m]=0;
gotoxy(2*(m+1),n);
printf(" ");//擦去方块
if(thing[n-1][m-2]==1)
thing[n-1][m-2]=0;
gotoxy(2*(m-1),n);
printf(" ");//擦去方块
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");//擦去方块
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
else if(weapons==3)
{
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");//擦去方块
print_my_bullet(m,n);
print_thing();
refresh_map();
}
else
{
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");//擦去方块
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
}
else if(thing[n-1][m-1]==2)//打到第二种方块
{
if(weapons==5)
{
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
else if(weapons==2)
{
m=0,n=0;
}
else
{
thing[n-1][m-1]=1;
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
}
else if(thing[n-1][m-1]==3)
{
if(weapons==4 || weapons==2)
m=0,n=0;
else if(weapons==5)
{
thing[n-1][m-1]=0;
gotoxy(2*m,n);
printf(" ");
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
else
{
thing[n-1][m-1]=2;
m=0,n=0;//子弹消失
print_thing();
refresh_map();
}
}
else if(thing[n-1][m-1]==4)//此方块不受子弹影响
{
m=0,n=0;//子弹消失
}
if(m1>0&&m1<29 && n1>0&&n1<29)//被坦克1号子弹击中
if(thing[n1-1][m1-1]==1)
{
thing[n1-1][m1-1]=0;
gotoxy(2*m1,n1);
printf(" ");
m1=0,n1=0;
print_thing();
refresh_map();
}
else if(thing[n1-1][m1-1]==2)
{
thing[n1-1][m1-1]=1;
m1=0,n1=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n1-1][m1-1]==3)
{
thing[n1-1][m1-1]=2;
m1=0,n1=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n-1][m-1]==4)//此方块不受子弹影响
{
m1=0,n1=0;//子弹消失
}
if(m2>0&&m2<29 && n2>0&&n2<29)
if(thing[n2-1][m2-1]==1)
{
thing[n2-1][m2-1]=0;
gotoxy(2*m2,n2);
printf(" ");
m2=0,n2=0;
print_thing();
refresh_map();
}
else if(thing[n2-1][m2-1]==2)
{
thing[n2-1][m2-1]=1;
m2=0,n2=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n2-1][m2-1]==3)
{
thing[n2-1][m2-1]=2;
m2=0,n2=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n2-1][m2-1]==4)//此方块不受子弹影响
{
m2=0,n2=0;//子弹消失
}
if(m3>0&&m3<29 && n3>0&&n3<29)
if(thing[n3-1][m3-1]==1)
{
thing[n3-1][m3-1]=0;
gotoxy(2*m3,n3);
printf(" ");
m3=0,n3=0;
print_thing();
refresh_map();
}
else if(thing[n3-1][m3-1]==2)
{
thing[n3-1][m3-1]=1;
m3=0,n3=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n3-1][m3-1]==3)
{
thing[n3-1][m3-1]=2;
m3=0,n3=0;//子弹消失
print_thing();
refresh_map();
}
else if(thing[n3-1][m3-1]==4)//此方块不受子弹影响
{
m3=0,n3=0;//子弹消失
}
}
void change_home()
{
if(m==14&&n==27 || m==15&&n==27 || m==14&&n==28 || m==15&&n==28)//如果子弹打到老家里,游戏结束
gameover();
else if(m>12 && n>25 && m<17 && n<29)
if(weapons==4)//只有4号子弹对老家的墙有效
{
home[n-26][m-13]=3;
screen_2("你修复了老家哦!",1);
m=0,n=0; //子弹消失
print_home();
refresh_map();
}
else
m=0,n=0;
if(m1==14&&n1==27 || m1==15&&n1==27 || m1==14&&n1==28 || m1==15&&n1==28)
gameover();
else if(m1>12 && n1>25 && m1<17 && n1<29)
if(home[n1-26][m1-13]==1)
{
home[n1-26][m1-13]=0;
screen_2("警报! 警报!",4);
gotoxy(2*m1,n1);
printf(" ");
m1=0,n1=0;
print_home();
refresh_map();
}
else if(home[n1-26][m1-13]==2)
{
home[n1-26][m1-13]=1;
screen_2("敌人威胁到了你的老家",4);
m1=0,n1=0; //子弹消失
print_home();
refresh_map();
}
else if(home[n1-26][m1-13]==3)
{
home[n1-26][m1-13]=2;
screen_2("敌人对你的防御开始了打击",4);
m1=0,n1=0; //子弹消失
print_home();
refresh_map();
}
if(m2==14&&n2==27 || m2==15&&n2==27 || m2==14&&n2==28 || m2==15&&n2==28)
gameover();
else if(m2>12 && n2>25 && m2<17 && n2<29)
if(home[n2-26][m2-13]==1)
{
home[n2-26][m2-13]=0;
screen_2("警报! 警报!",4);
gotoxy(2*m2,n2);
printf(" ");
m2=0,n2=0;
print_home();
refresh_map();
}
else if(home[n2-26][m2-13]==2)
{
home[n2-26][m2-13]=1;
screen_2("敌人威胁到了你的老家",4);
m2=0,n2=0; //子弹消失
print_home();
refresh_map();
}
else if(home[n2-26][m2-13]==3)
{
home[n2-26][m2-13]=2;
screen_2("敌人对你的防御开始了打击",4);
m2=0,n2=0; //子弹消失
print_home();
refresh_map();
}
if(m3==14&&n3==27 || m3==15&&n3==27 || m3==14&&n3==28 || m3==15&&n3==28)
gameover();
else if(m3>12 && n3>25 && m3<17 && n3<29)
if(home[n3-26][m3-13]==1)
{
home[n3-26][m3-13]=0;
screen_2("警报! 警报!",4);
gotoxy(2*m3,n3);
printf(" ");
m3=0,n3=0;
print_home();
refresh_map();
}
else if(home[n3-26][m3-13]==2)
{
home[n3-26][m3-13]=1;
screen_2("敌人威胁到了你的老家",4);
m3=0,n3=0; //子弹消失
print_home();
refresh_map();
}
else if(home[n3-26][m3-13]==3)
{
home[n3-26][m3-13]=2;
screen_2("敌人对你的防御开始了打击",4);
m3=0,n3=0; //子弹消失
print_home();
refresh_map();
}
}
void change_bullet()//当我的坦克子弹和敌人坦克子弹碰撞
{
if(m!=0 && m==m1 && n==n1)
{
clear_bullet(m,n);
m=0,n=0,
clear_bullet(m1,n1);
m1=0,n1=0;
}
if(m!=0 && m==m2 && n==n2)
{
clear_bullet(m,n);
m=0,n=0,
clear_bullet(m2,n2);
m2=0,n2=0;
}
if(m!=0 && m==m3 && n==n3)
{
clear_bullet(m,n);
m=0,n=0,
clear_bullet(m3,n3);
m3=0,n3=0;
}
}
void change_tank()
{
switch(state)
{
case 1 : //当我的坦克方向向上时
{
if(x==m1&&(y-1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&y==n1 || (x-1)==m1&&(y+1)==n1 || (x+1)==m1&&(y+1)==n1)//如果坦克1号子弹打到我的坦克
clear_my_tank(),screen_2("坦克1号击中了你 生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克1号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
if(x==m2&&(y-1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&y==n2 || (x-1)==m2&&(y+1)==n2 || (x+1)==m2&&(y+1)==n2)//如果坦克2号子弹打到我的坦克
clear_my_tank(),screen_2("坦克2号击中了你 生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克2号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
if(x==m3&&(y-1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&y==n3 || (x-1)==m3&&(y+1)==n3 || (x+1)==m3&&(y+1)==n3)//如果坦克3号子弹打到我的坦克
clear_my_tank(),screen_2("坦克3号击中了你 生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);//我的坦克回到初始位置,坦克3号子弹消失,生命值减1,检查游戏是否结束,若没结束初始化方向
}break;
case 2 :
{
if(x==m1&&(y+1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&y==n1 || (x-1)==m1&&(y-1)==n1 || (x+1)==m1&&(y-1)==n1)
clear_my_tank(),screen_2("坦克1号击中了你 生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
if(x==m2&&(y+1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&y==n2 || (x-1)==m2&&(y-1)==n2 || (x+1)==m2&&(y-1)==n2)
clear_my_tank(),screen_2("坦克2号击中了你 生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
if(x==m3&&(y+1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&y==n3 || (x-1)==m3&&(y-1)==n3 || (x+1)==m3&&(y-1)==n3)
clear_my_tank(),screen_2("坦克3号击中了你 生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
}
case 3 :
{
if(x==m1&&(y-1)==n1 || (x-1)==m1&&y==n1 || x==m1&&y==n1 || (x+1)==m1&&(y-1)==n1 || x==m1&&(y+1)==n1 || (x+1)==m1&&(y+1)==n1)
clear_my_tank(),screen_2("坦克1号击中了你 生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
if(x==m2&&(y-1)==n2 || (x-1)==m2&&y==n2 || x==m2&&y==n2 || (x+1)==m2&&(y-1)==n2 || x==m2&&(y+1)==n2 || (x+1)==m2&&(y+1)==n2)
clear_my_tank(),screen_2("坦克2号击中了你 生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
if(x==m3&&(y-1)==n3 || (x-1)==m3&&y==n3 || x==m3&&y==n3 || (x+1)==m3&&(y-1)==n3 || x==m3&&(y+1)==n3 || (x+1)==m3&&(y+1)==n3)
clear_my_tank(),screen_2("坦克3号击中了你 生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
}
case 4 :
{
if(x==m1&&(y-1)==n1 || (x-1)==m1&&(y-1)==n1 || x==m1&&y==n1 || (x-1)==m1&&(y+1)==n1 || x==m1&&(y+1)==n1 || (x+1)==m1&&y==n1)
clear_my_tank(),screen_2("坦克1号击中了你 生命值减1",4),x=10,y=27,m1=0,n1=0,life--,check_game(),turn_up(my_tank);
if(x==m2&&(y-1)==n2 || (x-1)==m2&&(y-1)==n2 || x==m2&&y==n2 || (x-1)==m2&&(y+1)==n2 || x==m2&&(y+1)==n2 || (x+1)==m2&&y==n2)
clear_my_tank(),screen_2("坦克2号击中了你 生命值减1",4),x=10,y=27,m2=0,n2=0,life--,check_game(),turn_up(my_tank);
if(x==m3&&(y-1)==n3 || (x-1)==m3&&(y-1)==n3 || x==m3&&y==n3 || (x-1)==m3&&(y+1)==n3 || x==m3&&(y+1)==n3 || (x+1)==m3&&y==n3)
clear_my_tank(),screen_2("坦克3号击中了你 生命值减1",4),x=10,y=27,m3=0,n3=0,life--,check_game(),turn_up(my_tank);
}
}
}
void change_tank_1()
{
switch(state_1)
{
case 1 :
{
if(x1==m&&(y1-1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&y1==n || (x1-1)==m&&(y1+1)==n || (x1+1)==m&&(y1+1)==n)//如果我的坦克子弹打到坦克1号
clear_tank_1(),screen_2("你击中了坦克1号 +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克1号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负
}break;
case 2 :
{
if(x1==m&&(y1+1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&y1==n || (x1-1)==m&&(y1-1)==n || (x1+1)==m&&(y1-1)==n)
clear_tank_1(),screen_2("你击中了坦克1号 +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 3 :
{
if(x1==m&&(y1-1)==n || (x1-1)==m&&y1==n || x1==m&&y1==n || (x1+1)==m&&(y1-1)==n || x1==m&&(y1+1)==n || (x1+1)==m&&(y1+1)==n)
clear_tank_1(),screen_2("你击中了坦克1号 +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 4 :
{
if(x1==m&&(y1-1)==n || (x1-1)==m&&(y1-1)==n || x1==m&&y1==n || (x1-1)==m&&(y1+1)==n || x1==m&&(y1+1)==n || (x1+1)==m&&y1==n)
clear_tank_1(),screen_2("你击中了坦克1号 +100分",3),x1=2,y1=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
}
}
void change_tank_2()
{
switch(state_2)
{
case 1 :
{
if(x2==m&&(y2-1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&y2==n || (x2-1)==m&&(y2+1)==n || (x2+1)==m&&(y2+1)==n)//如果我的坦克子弹打到坦克2号
clear_tank_2(),screen_2("你击中了坦克2号 +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克2号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负
}break;
case 2 :
{
if(x2==m&&(y2+1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&y2==n || (x2-1)==m&&(y2-1)==n || (x2+1)==m&&(y2-1)==n)
clear_tank_2(),screen_2("你击中了坦克2号 +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 3 :
{
if(x2==m&&(y2-1)==n || (x2-1)==m&&y2==n || x2==m&&y2==n || (x2+1)==m&&(y2-1)==n || x2==m&&(y2+1)==n || (x2+1)==m&&(y2+1)==n)
clear_tank_2(),screen_2("你击中了坦克2号 +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 4 :
{
if(x2==m&&(y2-1)==n || (x2-1)==m&&(y2-1)==n || x2==m&&y2==n || (x2-1)==m&&(y2+1)==n || x2==m&&(y2+1)==n || (x2+1)==m&&y2==n)
clear_tank_2(),screen_2("你击中了坦克2号 +100分",3),x2=14,y2=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
}
}
void change_tank_3()
{
switch(state_3)
{
case 1 :
{
if(x3==m&&(y3-1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&y3==n || (x3-1)==m&&(y3+1)==n || (x3+1)==m&&(y3+1)==n)//如果我的坦克子弹打到坦克3号
clear_tank_3(),screen_2("你击中了坦克3号 +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();//坦克3号回到初始位置,我的坦克号子弹消失,敌人数量值减1,分数加100,检查胜负
}break;
case 2 :
{
if(x3==m&&(y3+1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&y3==n || (x3-1)==m&&(y3-1)==n || (x3+1)==m&&(y3-1)==n)
clear_tank_3(),screen_2("你击中了坦克3号 +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 3 :
{
if(x3==m&&(y3-1)==n || (x3-1)==m&&y3==n || x3==m&&y3==n || (x3+1)==m&&(y3-1)==n || x3==m&&(y3+1)==n || (x3+1)==m&&(y3+1)==n)
clear_tank_3(),screen_2("你击中了坦克3号 +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
case 4 :
{
if(x3==m&&(y3-1)==n || (x3-1)==m&&(y3-1)==n || x3==m&&y3==n || (x3-1)==m&&(y3+1)==n || x3==m&&(y3+1)==n || (x3+1)==m&&y3==n)
clear_tank_3(),screen_2("你击中了坦克3号 +100分",3),x3=27,y3=2,m=0,n=0,enemy--,score=score+100,check_lv(),produce_star(),check_game();
}
}
}
void check_lv()
{
switch(score/1000)
{
case 0 :lv=1,speed=10;break;
case 1 :if(lv==1) screen_2("恭喜升到2级!",2);lv=2,speed=9;break;
case 2 :if(lv==2) screen_2("恭喜升到3级!",2);lv=3,speed=8;break;
case 3 :if(lv==3) screen_2("恭喜升到4级!",2);lv=4,speed=7;break;
case 4 :if(lv==4) screen_2("恭喜升到5级!",2);lv=5,speed=6;break;
case 5 :if(lv==5) screen_2("恭喜升到6级!",2);lv=6,speed=5;break;
case 6 :if(lv==6) screen_2("恭喜升到7级!",2);lv=7,speed=4;break;
case 7 :if(lv==7) screen_2("恭喜升到8级!",2);lv=8,speed=3;break;
case 8 :if(lv==8) screen_2("恭喜升到9级!",2);lv=9,speed=2;break;
case 9 :if(lv==9) screen_2("恭喜升到10级!,满级啦",2);lv=10,speed=1;break;
}
}
void get_map()
{
int map1[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map2[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1},{1,1,1,1,1,1,0,0,1,3,3,3,3,3,3,3,3,3,3,3,1,0,0,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1},{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1},{1,1,1,1,1,1,0,0,1,4,4,4,4,4,4,4,4,4,4,4,1,0,0,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1},{4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{1,1,1,1,3,3,0,0,3,3,1,1,1,1,1,1,1,1,3,3,0,0,3,3,1,1,1,1},{3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3},{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1},{2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1},{3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3},{2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2},{1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map3[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},{0,2,2,2,2,2,0,4,4,4,4,0,1,1,1,1,0,4,4,4,4,0,2,2,2,2,2,0},{0,0,2,2,2,0,4,4,4,4,4,4,0,1,1,0,4,4,4,4,4,4,0,2,2,2,0,0},{0,0,0,2,0,4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,0,2,0,0,0},{0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0},{0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0},{0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0},{1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1},{1,1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1},{1,1,1,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1,1},{1,1,1,4,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,1,1,1,1},{1,1,1,3,4,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,4,1,1,1,1},{1,1,1,1,3,4,0,0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,4,3,1,1,1,1},{1,1,1,1,1,3,4,0,0,0,0,0,0,4,4,0,0,0,0,0,0,4,3,1,1,1,1,1},{1,1,1,1,1,1,3,4,0,0,0,0,0,0,0,0,0,0,1,0,4,3,1,1,1,1,1,1},{1,1,1,1,1,1,1,3,4,0,0,0,0,0,1,0,0,0,0,4,3,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,3,4,0,0,0,0,0,0,0,0,4,3,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,4,0,0,0,0,0,0,0,0,0,0,4,3,3,3,3,3,3,3,3},{4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map4[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},{0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1},{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map5[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},{3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,4,3,3,3,3,3,3},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,4,4,1,1,4,4,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,4,4,4,4,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,1,1,1,1,1,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,4,4,4,4,4,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{1,1,4,4,4,4,4,4,4,1,1,3,3,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1},{3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int map6[28][28]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,4,4,4,4,4,4,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,1,1,1,1,1,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,4,1,1,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{1,1,0,1,4,0,0,0,4,1,1,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,4,4,4,4,4,4,4,4,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{1,1,0,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,4,0,0,0},{4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,4,4,4,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,3,4,0,0,0},{1,1,0,1,1,1,4,0,0,0,1,2,1,3,3,3,3,3,3,3,3,3,3,3,4,0,0,0},{1,1,0,4,4,4,4,0,0,0,1,2,1,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,1,1,1,1,1,1,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
switch(level)//判断是第几关,然后载入相应地图
{
case 1 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map1[i][j];
}break;
case 2 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map2[i][j];
}break;
case 3 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map3[i][j];
}break;
case 4 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map4[i][j];
}break;
case 5 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map5[i][j];
}break;
case 6 :
{
for(int i=0;i<28;i++)
for(int j=0;j<28;j++)
thing[i][j]=map6[i][j];
}break;
default :
{
for(int i=4;i<24;i++)
for(int j=0;j<28;j++)
thing[i][j]=rand()%5;
}
}
}
void stop()
{
int a=0;
char *poem[50]={" 壮哉神将陆伯言"," 丈八二桃把营连"," 一兵队友张文远"," 二兵袁术只等闲"," 己方残血放万箭"," 敌人弱势开桃园"," 转眼队友全托管"," 挂上闪电继续连"," 铁索全场遭天谴"," 一道闪电划过天"," 苦心经营几十年"," 一夜回到解放前"," 队友绝望人心散"," 濒死求桃无人怜"," 凡人闻之结叹惋"," 只见神将笑不言"," 我有牌堆很简单"," 神技自救不要钱"," 连完桃来再连酒"," 救完自己救队友"," 年轻任性谁能管"," 笑看三核被炸残"," 只是敌人太狡诈"," 各种刷牌各种卡"," 凡人皆畏二术禅"," 国太香香没得玩"," 手牌装备全都有"," 体力瞬间就回满"," 队友全问怎么办"," 怀疑陆神要崩盘"," 神将表示莫惊慌"," 掏出神器从裤裆"," 要问神器是什么"," 连弩44杀清全场"," 凡人表示瞎狗眼"," 不识神将在眼前"," 从此美名天下传"," 众神闻之皆跪舔"," 遍寻三国名将传"," 谁人不识陆伯言"," "," "," "," "," 你居然看完。。。 "," "," "," "," "," "};
char key;
screen_2("游戏暂停",4);
while(1)
{
for(int i=0;i<50;i++)
{
Sleep(2000);
if (kbhit()) //检测
{
key = getch();//捕获按键
if(key==32)
{
screen_2("准备开始",2);
a=1;
break;
}
}
screen_2(poem[i],2);
if(a)
break;
}
if(a)
break;
}
}
void help()
{
char key1,key2;
int a=1;
for(int i=15;i<29;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,15);
printf(" 帮助 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,17);
printf("↑ ↓ ← → 控制方向");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,19);
printf(" 小写 w 切换武器");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,21);
printf(" 小写 s 切换皮肤");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,23);
printf(" 小写 h 帮助/退出");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,25);
printf(" 空格 暂停/开始");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
gotoxy(62,27);
printf("按0查看更多");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
gotoxy(62,28);
printf(" 版本:1.0");
while(1)
{
if (kbhit()) //检测,如果有按键就执行if里面的
{
key1 = getch();//捕获按键
if( 104 == key1 )
{
screen_2("看完帮助 继续游戏吧",2);
screen_3();
break;
}
else if( 48 == key1 )
{
while(1)
{
for(int i=17;i<29;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
switch(a)
{
case 1 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,17);
printf("■ 绿色方块可承受一次打击");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
gotoxy(62,19);
printf("■ 黄色油块可承受两次打击");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
gotoxy(62,21);
printf("■ 白色冰块可承受三次打击");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
gotoxy(62,23);
printf("■ 蓝色石块无法被破环");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
gotoxy(62,27);
printf("按空格键继续");
}break;
case 2 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,17);
printf("⊕ 普通子弹攻击力为1 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,19);
printf("∷ 散弹可对绿色方块造成大");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,21);
printf("范围破坏,但是无法对其它类");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,23);
printf("型的方块造成破坏 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,25);
printf("◎ 气泡弹可以对一排的绿色");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,27);
printf("方块造成破坏");
}break;
case 3 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,17);
printf("※ 雪花弹对白色冰块无效,");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,19);
printf("但是可以将老家的围墙修成白");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,21);
printf("色冰块,从而保护老家");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,23);
printf("● 超级炮弹可以对除蓝色石");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,25);
printf("块外所有方块造成一次性的巨");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,27);
printf("大破坏");
}break;
case 4 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,17);
printf("每打掉一辆坦克加100 分,同");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,19);
printf("时有一定几率掉落星星,收集");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,21);
printf("星星可解锁武器和皮肤。每当");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,23);
printf("分数达到整千时,你将升级,");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,25);
printf("升级后,子弹速度将会变快,");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,27);
printf("同时敌人也将变强");
}break;
case 5 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,17);
printf("游戏内置六张地图,第六关往");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,19);
printf("后将会出现系统的随机地图");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,21);
printf("友情提示:你自己的子弹都");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,23);
printf("无法对老家的围墙造成破坏");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,25);
printf(",但是可以对内部造成破坏");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
gotoxy(62,27);
printf(",因此别总把枪口对着老家");
}break;
case 6 :
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
gotoxy(62,27);
printf("按空格键退出");
}break;
}
while(1)
{
if (32==getch()) a++;break;
}
if(a==7)break;
}
}
}
if(a==7)
{
screen_2("看完帮助 继续游戏吧",2);
screen_3();
break;
}
}
}
void check_game()
{
if(life==0)
gameover();
if(enemy==0)
next_level();
}
void next_level()
{
screen_1();
level++;
for(int i=15;i<29;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
gotoxy(62,17);
printf(" 恭喜过关 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,23);
printf(" 按 空格键 继续游戏 ");
while(1)
{
if(32 == getch())
{
int home0[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//定义一个老家的初始化值
{
for(int i=0;i<5;i++)
info[i]=" ";//通知清零
}
{
for(int i=0;i<3;i++)//老家初始化
for(int j=0;j<4;j++)
home[i][j]=home0[i][j];
}
m=0 , n=0 ;//我的坦克子弹的坐标清零
m1=0 , n1=0;//坦克1号子弹的坐标清零
m2=0 , n2=0;//坦克2号子弹的坐标清零
m3=0 , n3=0;//坦克3号子弹的坐标清零
{
for(int i=1;i<29;i++)
for(int j=1;j<29;j++)
{
gotoxy(2*i,j);
printf(" ");
}
}
life=3;//生命初始化
enemy=13;//敌人数量初始化
s=0,t=0;//星星坐标
get_map();//获得地图
refresh_map();//刷新地图
print_home();//打印老家
print_thing();//打印物品
direction=0;//我的坦克子弹射向初始化
direction_1=0;//坦克1号子弹射向初始化
direction_2=0;//坦克2号子弹射向初始化
direction_3=0;//坦克3号子弹射向初始化
x=10;y=27;//我的坦克位置初始化
state=0;
turn_up(my_tank);//我的坦克方向初始化
x1=2;y1=2;//坦克1号位置初始化
state_1=0;
turn_down_1(tank_1);//坦克1号方向初始化
x2=14;y2=2;//坦克2号位置初始化
state_2=0;
turn_down_2(tank_2);//坦克2号方向初始化
x3=27;y3=2;//坦克3号位置初始化
state_3=0;
turn_down_3(tank_3);//坦克3号方向初始化
screen_1();
screen_2("游戏开始",4);
break;
}
}
}
void gameover()
{
for(int i=15;i<29;i++)//先清屏
{
gotoxy(62,i);
printf(" ");
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy(62,17);
printf(" 游戏结束 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
gotoxy(62,23);
printf(" 按 空格键 重新开始 ");
while(1)
{
if(32 == getch())
{
initial();
break;
}
}
}
void initial()
{
int home0[3][4]={{2,2,2,2},{2,1,1,2},{2,1,1,2}};//定义一个老家的初始化值
life=3;//生命初始化
enemy=13;//敌人数量初始化
level=1;//关卡初始化
weapons=1;//武器初始化
skin=1;//皮肤初始化
star=1;//星星初始化
s=0,t=0;//星星坐标
score=0;//分数初始化
lv=1;//等级初始化
speed=10;//速度初始化
{
for(int i=0;i<5;i++)
info[i]=" ";//通知清零
}
{
for(int i=0;i<3;i++)//老家初始化
for(int j=0;j<4;j++)
home[i][j]=home0[i][j];
}
m=0 , n=0 ;//我的坦克子弹的坐标清零
m1=0 , n1=0;//坦克1号子弹的坐标清零
m2=0 , n2=0;//坦克2号子弹的坐标清零
m3=0 , n3=0;//坦克3号子弹的坐标清零
{
for(int i=1;i<29;i++)
for(int j=1;j<29;j++)
{
gotoxy(2*i,j);
printf(" ");
}
}
get_map();//获得地图
refresh_map();//刷新地图
print_home();//打印老家
print_thing();//打印物品
direction=0;//我的坦克子弹射向初始化
direction_1=0;//坦克1号子弹射向初始化
direction_2=0;//坦克2号子弹射向初始化
direction_3=0;//坦克3号子弹射向初始化
x=10;y=27;//我的坦克位置初始化
state=0;
turn_up(my_tank);//我的坦克方向初始化
x1=2;y1=2;//坦克1号位置初始化
state_1=0;
turn_down_1(tank_1);//坦克1号方向初始化
x2=14;y2=2;//坦克2号位置初始化
state_2=0;
turn_down_2(tank_2);//坦克2号方向初始化
x3=27;y3=2;//坦克3号位置初始化
state_3=0;
turn_down_3(tank_3);//坦克3号方向初始化
screen_1();
screen_2("游戏开始",4);
screen_3();
}
seven.
#include<iostream>
#include<vector>
using namespace std;
class qipan
{
public:
qipan() {}
~qipan() {};
//向上下左右,斜的方向
char left(int x, int y)
{//检查是否合适
if (x >= 1 && x <= hight&& y - 1 >= 1 && y - 1 <= width)
{
return q[x][y - 1];
}
else {
return 'F';
}
}
char right(int x, int y)
{
if (x >= 1 && x <= hight&&y + 1 >= 1 && y + 1 <= width)
{
return q[x][y + 1];
}
else {
return 'F';
}
}
char up(int x, int y)
{
if (x - 1 >= 1 && x - 1 <= hight && y >= 1 && y <= width)
{
return q[x - 1][y];
}
else {
return 'F';
}
}
char down(int x, int y)
{
if (x + 1 >= 1 && x + 1 <= hight && y >= 1 && y <= width)
{
return q[x + 1][y];
}
else {
return 'F';
}
}
char left_up(int x, int y)
{
if (x - 1 >= 1 && x - 1 <= hight && y - 1 >= 1 && y - 1 <= width)
{
return q[x - 1][y - 1];
}
else {
return 'F';
}
}
char left_down(int x, int y)
{
if (x + 1 >= 1 && x + 1 <= hight && y - 1 >= 1 && y - 1 <= width)
{
return q[x + 1][y - 1];
}
else {
return 'F';
}
}
char right_up(int x, int y)
{
if (x - 1 >= 1 && x - 1 <= hight && y + 1 >= 1 && y + 1 <= width)
{
return q[x - 1][y + 1];
}
else {
return 'F';
}
}
char right_down(int x, int y)
{
if (x + 1 >= 1 && x + 1 <= hight && y + 1 >= 1 && y + 1 <= width)
{
return q[x + 1][y + 1];
}
else {
return 'F';
}
}
void init_cur() {
h_cur = hang;
l_cur = lie;
}
bool win()
{
bool WIN = false;
char temp = q[hang][lie];
//以上为例,每次先看上面的5个,假如一样,iter++;否则 break;再加上下的方向,同样iter++;最后iter+1==5,WIN=true;并且退出
//各个方向重复,上下左右,斜着的。
//赢了直接退出。
//显示是谁赢了
//左右
int count_lr = 1;
init_cur();
for (int i = 0; i < 4; i++)
{
if (left(h_cur, l_cur) == temp)
count_lr++;
else
break;
l_cur--;
}
init_cur();
for (int i = 0; i < 4; i++)
{
if (right(h_cur, l_cur) == temp)
count_lr++;
else
break;
l_cur++;
}
if (count_lr == 5)
WIN = true;
//上下
int count_ud = 1;
init_cur();
for (int i = 0; i < 4; i++)
{
if (up(h_cur, l_cur) == temp)
count_ud++;
else
break;
h_cur--;
}
init_cur();
for (int i = 0; i < 4; i++)
{
if (down(h_cur, l_cur) == temp)
count_ud++;
else
break;
h_cur++;
}
if (count_ud == 5)
WIN = true;
//左斜
int count_lt = 1;
init_cur();
for (int i = 0; i < 4; i++)
{
if (left_up(h_cur, l_cur) == temp)
count_lt++;
else
break;
h_cur--;
l_cur--;
}
init_cur();
for (int i = 0; i < 4; i++)
{
if (left_down(h_cur, l_cur) == temp)
count_lt++;
else
break;
h_cur++;
l_cur--;
}
if (count_lt == 5)
WIN = true;
//右边斜
int count_rt = 1;
init_cur();
for (int i = 0; i < 4; i++)
{
if (right_up(h_cur, l_cur) == temp)
count_rt++;
else
break;
h_cur--;
l_cur++;
}
init_cur();
for (int i = 0; i < 4; i++)
{
if (right_down(h_cur, l_cur) == temp)
count_rt++;
else
break;
h_cur++;
l_cur++;
}
if (count_rt == 5)
WIN = true;
return WIN;
}
void qipan_array()
{
for (int i = 0; i < hight; i++) {
for (int j = 0; j < width; j++)
q[i][j] = '+';
}
}
void prin_qipan()
{
//打印二维数组;每一行要打印上行号,以及列号
for (int i = 0; i <hight; i++)
{
for (int j = 0; j < width; j++)
{
cout << q[i][j] << " ";
}
cout << i;
cout << endl;
}
for (int j = 0; j <width; j++)
{
cout << j << " ";
}
cout << endl << "________________________________" << endl;
}
int xiaqi(int player)
{
if (player == 1) {
q[hang][lie] = '*';
}
else if (player == 2)
{
q[hang][lie] = '@';
}
else
cout << "input player is wrong" << endl;
return 0;
}
//初始化行列
int gethang(int h)
{
hang = h;
return 0;
}
int getlie(int l)
{
lie = l;
return 0;
}
int h_cur;
int l_cur;
const int hight = 9;
const int width = 9;
int hang; int lie;
char q[9][9];
};
int main()
{
int hang, lie;
qipan wzq;
wzq.qipan_array();
cout << "A 与B 玩五子棋" << endl;
cout << "A use * and B use @" << endl;
cout << "________________________________" << endl;
for (int i = 0; i < 15; i++) {
cout << "A 输入行: ";
cin >> hang;
cout << "A 输入列: ";
cin >> lie;
if (wzq.q[hang][lie] != '+')
cout << "输入的行列数字已经有人占据了" << endl;
else {
wzq.gethang(hang);
wzq.getlie(lie);
wzq.xiaqi(1);
wzq.prin_qipan();
if (wzq.win())
{
cout << "A is winner" << endl;
exit(0);
}
}
//b 开始了
cout << "B 输入行: ";
cin >> hang;
cout << "B 输入列: ";
cin >> lie;
if (wzq.q[hang][lie] != '+')
cout << "输入的行列数字已经有人占据了" << endl;
else {
wzq.gethang(hang);
wzq.getlie(lie);
wzq.xiaqi(2);
wzq.prin_qipan();
if (wzq.win())
{
cout << "B is winner" << endl;
exit(0);
}
}
}
return 0;
}
eight.
#include <iostream>
#include <string>
#include <ctime>
#include <windows.h>
#include <conio.h>
using namespace std;
int food[2] = { 9, 9 };//初始食物坐标
int snake[1000][2];//蛇身坐标
int length = 1;//初始蛇长
int headX, headY;//蛇头坐标
int speed = 500;//游戏难度
int score = 0;//分数
int level = 1;//难度等级
string name;//玩家姓名
void gotoxy(short x, short y);//移动光标
int setdirection(int x);//确定方向变量
void changesnake(int x);//改变蛇身坐标
void ifchangefood();//判断蛇是否吃到食物
void makefood();//创造新食物
bool judgelife();//判断蛇是否存活
void drawsnake();//画蛇
void drawfood();//画食物
void drawwall();//画墙
void drawscore();//画数据
void draw();//绘图
int main()
{
SetConsoleTitle("贪吃蛇游戏");
int po = 2;//初始方向变量
snake[0][0] = 7;
snake[0][1] = 7;//初始蛇头坐标
headX = snake[0][0];
headY = snake[0][1];
gotoxy(30, 7);
cout << "欢迎来到贪吃蛇游戏";
gotoxy(30, 11);
cout << "请输入你的姓名:";
cin >> name;
system("cls");
gotoxy(30, 7);
cout << "游戏控制方式:";
gotoxy(30, 9);
cout << "W键:向上 S键:向下";
gotoxy(30, 11);
cout << "A键:向左 D键:向右";
gotoxy(30, 13);
cout << "空格键:暂停";
gotoxy(30, 15);
cout << "将游戏窗口最大化之后";
gotoxy(30, 17);
cout << "按回车键开始游戏...";
cin.get();
cin.get();
system("cls");
while (true)
{
po = setdirection(po);
system("cls");
changesnake(po);
ifchangefood();
if (!judgelife())
break;
draw();
Sleep(speed);
}
gotoxy(30, 10);
cout << "Game Over!!!";
Sleep(2000);
gotoxy(28, 12);
system("pause");
return 0;
}
void gotoxy(short x, short y)
{
COORD position = { x, y };
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, position);
}
int setdirection(int x)
{
char ch;
if (_kbhit())
{
ch = _getch();
switch (ch)
{
case 'w':
x = 1;
break;
case 's':
x = 2;
break;
case 'a':
x = 3;
break;
case 'd':
x = 4;
break;
case ' ':
gotoxy(37, 16);
cout << "游 戏 暂 停. . .";
gotoxy(37, 18);
system("pause");
break;
default:
break;
}
}
return x;
}
void changesnake(int x)
{
switch (x)
{
case 1:
headY -= 1;
break;
case 2:
headY += 1;
break;
case 3:
headX -= 1;
break;
case 4:
headX += 1;
break;
default:
break;
}
for (int i = length; i > 0; --i)
{
for (int j = 0; j < 2; ++j)
{
snake[i][j] = snake[i - 1][j];
}
}
snake[0][0] = headX;
snake[0][1] = headY;
}
void ifchangefood()
{
if (snake[0][0] == food[0] && snake[0][1] == food[1])
{
length++;
makefood();
++score;
if (length > 5)
{
speed = 450;
level = 2;
}
if (length > 10)
{
speed = 400;
level = 3;
}
if (length > 15)
{
speed = 350;
level = 4;
}
if (length > 20)
{
speed = 300;
level = 5;
}
if (length > 25)
{
speed = 250;
level = 6;
}
if (length > 30)
{
speed = 200;
level = 7;
}
if (length > 35)
{
speed = 150;
level = 8;
}
if (length > 40)
{
speed = 100;
level = 9;
}
if (length > 45)
{
speed = 50;
level = 10;
}
}
}
void makefood()
{
srand((unsigned)time(NULL));
food[0] = rand() % 30 + 2;
food[1] = rand() % 30 + 4;
for (int m = 0; m < length; ++m)
{
if (food[0] == snake[m][0] && food[1] == snake[m][1])
{
makefood();
break;
}
}
}
bool judgelife()
{
for (int x = 1; x < length; ++x)
{
if (headX == snake[x][0] && headY == snake[x][1])
{
return false;
}
}
if (headX < 1 || headY < 3 || headX > 34 || headY > 34)
return false;
else
return true;
}
void drawsnake()
{
gotoxy(snake[0][0], snake[0][1]);
cout << "@";
for (int n = 1; n < length; ++n)
{
gotoxy(snake[n][0], snake[n][1]);
cout << "#";
}
}
void drawfood()
{
gotoxy(food[0], food[1]);
cout << "$";
}
void drawwall()
{
gotoxy(0, 0);
cout << "------------------------------------";
gotoxy(16, 1);
cout << "贪吃蛇";
gotoxy(0, 2);
cout << "++++++++++++++++++++++++++++++++++++";
gotoxy(0, 35);
cout << "------------------------------------";
for (int x = 0; x < 35; ++x)
{
gotoxy(0, x);
cout << "|";
gotoxy(35, x);
cout << "|";
}
}
void drawscore()
{
gotoxy(37, 10);
cout << "分数:" << score;
gotoxy(37, 12);
cout << "等级:" << level;
gotoxy(37, 14);
cout << "玩家姓名:" << name;
}
void draw()
{
drawsnake();
drawfood();
drawwall();
drawscore();
}
0
宋婉婷
中级守护
中级守护
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <windows.h>
#include <conio.h>
using namespace std;
int block00[4][4] = { { 10,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 },{ 0,0,0,0 } };
int block01[4][4] = { { 11,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 } };
int block02[4][4] = { { 12,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,1,0,0 } };
int block03[4][4] = { { 13,0,0,0 },{ 0,1,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block04[4][4] = { { 14,0,0,0 },{ 0,0,0,0 },{ 0,1,0,0 },{ 1,1,1,0 } };
int block05[4][4] = { { 15,0,0,0 },{ 0,1,0,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block06[4][4] = { { 16,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 1,0,0,0 } };
int block07[4][4] = { { 17,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block08[4][4] = { { 18,0,0,0 },{ 0,0,0,0 },{ 0,0,1,0 },{ 1,1,1,0 } };
int block09[4][4] = { { 19,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 0,1,1,0 } };
int block10[4][4] = { { 20,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,0,1,0 } };
int block11[4][4] = { { 21,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 1,1,0,0 } };
int block12[4][4] = { { 22,0,0,0 },{ 0,0,0,0 },{ 1,0,0,0 },{ 1,1,1,0 } };
int block13[4][4] = { { 23,0,0,0 },{ 0,1,1,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block14[4][4] = { { 24,0,0,0 },{ 0,0,0,0 },{ 0,1,1,0 },{ 1,1,0,0 } };
int block15[4][4] = { { 25,0,0,0 },{ 1,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block16[4][4] = { { 26,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 0,1,1,0 } };
int block17[4][4] = { { 27,0,0,0 },{ 0,0,1,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block18[4][4] = { { 28,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 1,1,0,0 } };
void initialWindow(HANDLE hOut);//初始化窗口
void initialPrint(HANDLE hOut);//初始化界面
void gotoXY(HANDLE hOut, int x, int y);//移动光标
void roundBlock(HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置
bool collisionDetection(int block[4][4], int map[21][12], int x, int y);//检测碰撞
void printBlock(HANDLE hOut, int block[4][4], int x, int y);//打印方块
void clearBlock(HANDLE hOut, int block[4][4], int x, int y);//消除方块
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落
void myStop(HANDLE hOut, int block[4][4]);//游戏暂停
void gameOver(HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);//判断是否能消行并更新分值
int main()
{
int map[21][12];
int blockA[4][4];//候选区的方块
int blockB[4][4];//下落中的方块
int positionX, positionY;//方块左上角的坐标
bool check;//检查方块还能不能下落
char key;//用来存储按键
int val;//用来控制下落速度
int fraction;//用来存储得分
int checkpoint;//用来存储关卡
int times;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄
initialWindow(hOut);
initial:
gotoXY(hOut, 0, 0);
initialPrint(hOut);
check = true;
val = 50;
fraction = 0;
checkpoint = 1;
times = val;
for (int i = 0; i < 20; ++i)
for (int j = 1; j < 11; ++j)
map[i][j]=0;
for (int i = 0; i < 20; ++i)
map[i][0] = map[i][11] = 1;
for (int i = 0; i < 12; ++i)
map[20][i] = 1;
srand((unsigned)time(NULL));
roundBlock(hOut, blockA);
while (true)
{
if (check)
{
eliminateRow(hOut, map, val, fraction, checkpoint);
check = false;
positionX = -3;
positionY = 4;
if (collisionDetection(blockA, map, positionX, positionY))
{
for (int i = 0; i < 4; ++i)
for (int j = 0; j < 4; ++j)
blockB[i][j] = blockA[i][j];
roundBlock(hOut, blockA);
}
else
{
gameOver(hOut, blockA, map);
goto initial;
}
}
printBlock(hOut, blockB, positionX, positionY);
if (_kbhit())
{
key = _getch();
switch (key)
{
case 72:
myUp(hOut, blockB, map, positionX, positionY);
break;
case 75:
myLeft(hOut, blockB, map, positionX, positionY);
break;
case 77:
myRight(hOut, blockB, map, positionX, positionY);
break;
case 80:
switch (myDown(hOut, blockB, map, positionX, positionY))
{
case 0:
check = false;
break;
case 1:
check = true;
break;
case 2:
gameOver(hOut, blockB, map);
goto initial;
default:
break;
}
break;
case 32:
myStop(hOut, blockA);
break;
case 27:
exit(0);
default:
break;
}
}
Sleep(20);
if (0 == --times)
{
switch (myDown(hOut, blockB, map, positionX, positionY))
{
case 0:
check = false;
break;
case 1:
check = true;
break;
case 2:
gameOver(hOut, blockB, map);
goto initial;
default:
break;
}
times = val;
}
}
cin.get();
return 0;
}
void initialWindow(HANDLE hOut)
{
SetConsoleTitle("俄罗斯方块");
COORD size = { 80, 25 };
SetConsoleScreenBufferSize(hOut, size);
SMALL_RECT rc = { 0, 0, 79, 24 };
SetConsoleWindowInfo(hOut, true, &rc);
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(hOut, &cursor_info);
}
void initialPrint(HANDLE hOut)
{
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
for (int i = 0; i < 20; ++i)
{
cout << "■ ■☆ ☆" << endl;
}
gotoXY(hOut, 26, 0);
cout << "☆☆☆☆☆☆☆☆☆☆☆";
gotoXY(hOut, 0, 20);
cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆";
gotoXY(hOut, 26, 1);
cout << "分 数: ";
gotoXY(hOut, 26, 2);
cout << "关 卡: ";
gotoXY(hOut, 26, 4);
cout << "下一方块:";
gotoXY(hOut, 26, 9);
cout << "操作方法:";
gotoXY(hOut, 30, 11);
cout << "↑:旋转 ↓:速降";
gotoXY(hOut, 30, 12);
cout << "→:右移 ←:左移";
gotoXY(hOut, 30, 13);
cout << "空格键:开始/暂停";
gotoXY(hOut, 30, 14);
cout << "Esc 键:退出";
gotoXY(hOut, 26, 16);
cout << "关 于:";
gotoXY(hOut, 30, 18);
cout << "俄罗斯方块V1.0";
gotoXY(hOut, 35, 19);
cout << "作者:宋婉婷";
}
void gotoXY(HANDLE hOut, int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(hOut, pos);
}
void roundBlock(HANDLE hOut, int block[4][4])
{
clearBlock(hOut, block, 5, 15);
switch (rand() % 19)
{
case 0:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
break;
case 1:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block01[i][j];
}
}
break;
case 2:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block02[i][j];
}
}
break;
case 3:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block03[i][j];
}
}
break;
case 4:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block04[i][j];
}
}
break;
case 5:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block05[i][j];
}
}
break;
case 6:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block06[i][j];
}
}
break;
case 7:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block07[i][j];
}
}
break;
case 8:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block08[i][j];
}
}
break;
case 9:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block09[i][j];
}
}
break;
case 10:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block10[i][j];
}
}
break;
case 11:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block11[i][j];
}
}
break;
case 12:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block12[i][j];
}
}
break;
case 13:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block13[i][j];
}
}
break;
case 14:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block14[i][j];
}
}
break;
case 15:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block15[i][j];
}
}
break;
case 16:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block16[i][j];
}
}
break;
case 17:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block17[i][j];
}
}
break;
case 18:
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block18[i][j];
}
}
break;
default:
break;
}
printBlock(hOut, block, 5, 15);
}
bool collisionDetection(int block[4][4], int map[21][12], int x, int y)
{
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
if (x + i >= 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1)
{
return false;
}
}
}
return true;
}
void printBlock(HANDLE hOut, int block[4][4], int x, int y)
{
switch (block[0][0])
{
case 10:
case 11:
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
break;
case 12:
case 13:
case 14:
case 15:
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 16:
case 17:
case 18:
case 19:
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 20:
case 21:
case 22:
case 23:
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
break;
case 24:
case 25:
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
break;
case 26:
case 27:
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
break;
case 28:
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
break;
default:
break;
}
for (int i = 0; i < 4; ++i)
{
if (i + x >= 0)
{
for (int j = 0; j < 4; ++j)
{
if (block[i][j] == 1)
{
gotoXY(hOut, 2 * (y + j), x + i);
cout << "■";
}
}
}
}
}
void clearBlock(HANDLE hOut, int block[4][4], int x, int y)
{
for (int i = 0; i < 4; ++i)
{
if (i + x >= 0)
{
for (int j = 0; j < 4; ++j)
{
if (block[i][j] == 1)
{
gotoXY(hOut, 2 * (y + j), x + i);
cout << " ";
}
}
}
}
}
void gameOver(HANDLE hOut, int block[4][4], int map[21][12])
{
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY(hOut, 9, 8);
cout << "GAME OVER";
gotoXY(hOut, 8, 9);
cout << "空格键:重来";
gotoXY(hOut, 8, 10);
cout << "ESC键:退出";
char key;
while (true)
{
key = _getch();
if (key == 32)
{
return;
}
if (key == 27)
{
exit(0);
}
}
}
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y)
{
if (collisionDetection(block, map, x + 1, y))
{
clearBlock(hOut, block, x, y);
++x;
return 0;
}
if (x < 0)
{
return 2;
}
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
if (block[i][j] == 1)
{
map[x + i][y + j] = 1;
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY(hOut, 2 * (y + j), x + i);
cout << "■";
}
}
}
return 1;
}
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
if (collisionDetection(block, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
--y;
}
}
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
if (collisionDetection(block, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
++y;
}
}
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y)
{
switch (block[0][0])
{
case 10:
if (collisionDetection(block01, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block01[i][j];
}
}
}
break;
case 11:
if (collisionDetection(block00, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
}
else if (collisionDetection(block00, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
--y;
}
else if (collisionDetection(block00, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
++y;
}
else if (collisionDetection(block00, map, x, y - 2))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
y = y - 2;
}
else if (collisionDetection(block00, map, x, y + 2))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block00[i][j];
}
}
y = y + 2;
}
break;
case 12:
if (collisionDetection(block03, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block03[i][j];
}
}
}
else if (collisionDetection(block03, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block03[i][j];
}
}
--y;
}
else if (collisionDetection(block03, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block03[i][j];
}
}
++y;
}
break;
case 13:
if (collisionDetection(block04, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block04[i][j];
}
}
}
else if (collisionDetection(block04, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block04[i][j];
}
}
--y;
}
else if (collisionDetection(block04, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block04[i][j];
}
}
++y;
}
break;
case 14:
if (collisionDetection(block05, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block05[i][j];
}
}
}
else if (collisionDetection(block05, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block05[i][j];
}
}
--y;
}
else if (collisionDetection(block05, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block05[i][j];
}
}
++y;
}
break;
case 15:
if (collisionDetection(block02, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block02[i][j];
}
}
}
else if (collisionDetection(block02, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block02[i][j];
}
}
--y;
}
else if (collisionDetection(block02, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block02[i][j];
}
}
++y;
}
break;
case 16:
if (collisionDetection(block07, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block07[i][j];
}
}
}
else if (collisionDetection(block07, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block07[i][j];
}
}
--y;
}
else if (collisionDetection(block07, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block07[i][j];
}
}
++y;
}
break;
case 17:
if (collisionDetection(block08, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block08[i][j];
}
}
}
else if (collisionDetection(block08, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block08[i][j];
}
}
--y;
}
else if (collisionDetection(block08, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block08[i][j];
}
}
++y;
}
break;
case 18:
if (collisionDetection(block09, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block09[i][j];
}
}
}
else if (collisionDetection(block09, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block09[i][j];
}
}
--y;
}
else if (collisionDetection(block09, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block09[i][j];
}
}
++y;
}
break;
case 19:
if (collisionDetection(block06, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block06[i][j];
}
}
}
else if (collisionDetection(block06, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block06[i][j];
}
}
--y;
}
else if (collisionDetection(block06, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block06[i][j];
}
}
++y;
}
break;
case 20:
if (collisionDetection(block11, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block11[i][j];
}
}
}
else if (collisionDetection(block11, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block11[i][j];
}
}
--y;
}
else if (collisionDetection(block11, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block11[i][j];
}
}
++y;
}
break;
case 21:
if (collisionDetection(block12, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block12[i][j];
}
}
}
else if (collisionDetection(block12, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block12[i][j];
}
}
--y;
}
else if (collisionDetection(block12, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block12[i][j];
}
}
++y;
}
break;
case 22:
if (collisionDetection(block13, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block13[i][j];
}
}
}
else if (collisionDetection(block13, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block13[i][j];
}
}
--y;
}
else if (collisionDetection(block13, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block13[i][j];
}
}
++y;
}
break;
case 23:
if (collisionDetection(block10, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block10[i][j];
}
}
}
else if (collisionDetection(block10, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block10[i][j];
}
}
--y;
}
else if (collisionDetection(block10, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block10[i][j];
}
}
++y;
}
break;
case 24:
if (collisionDetection(block15, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block15[i][j];
}
}
}
else if (collisionDetection(block15, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block15[i][j];
}
}
--y;
}
else if (collisionDetection(block15, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block15[i][j];
}
}
++y;
}
break;
case 25:
if (collisionDetection(block14, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block14[i][j];
}
}
}
else if (collisionDetection(block14, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block14[i][j];
}
}
--y;
}
else if (collisionDetection(block14, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block14[i][j];
}
}
++y;
}
break;
case 26:
if (collisionDetection(block17, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block17[i][j];
}
}
}
else if (collisionDetection(block17, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block17[i][j];
}
}
--y;
}
else if (collisionDetection(block17, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block17[i][j];
}
}
++y;
}
break;
case 27:
if (collisionDetection(block16, map, x, y))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block16[i][j];
}
}
}
else if (collisionDetection(block16, map, x, y - 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block16[i][j];
}
}
--y;
}
else if (collisionDetection(block16, map, x, y + 1))
{
clearBlock(hOut, block, x, y);
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
block[i][j] = block16[i][j];
}
}
++y;
}
break;
default:
break;
}
}
void myStop(HANDLE hOut, int block[4][4])
{
clearBlock(hOut, block, 5, 15);
SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY(hOut, 30, 7);
cout << "游戏暂停";
char key;
while (true)
{
key = _getch();
if (key == 32)
{
gotoXY(hOut, 30, 7);
cout << " ";
printBlock(hOut, block, 5, 15);
return;
}
if (key == 27)
{
exit(0);
}
}
}
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint)
{
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
for (int i = 19; i >= 0; --i)
{
int x = 0;
for (int j = 1; j < 11; ++j)
{
x += map[i][j];
}
if (x == 10)
{
fraction += 100;
if (val > 1 && fraction / 1000 + 1 != checkpoint)
{
checkpoint = fraction / 1000 + 1;
val -= 5;
}
for (int m = i; m > 0; --m)
{
for (int n = 1; n < 11; ++n)
{
map[m][n] = map[m - 1][n];
gotoXY(hOut, 2 * n, m);
if (map[m][n] == 1)
{
cout << "■";
}
else
{
cout << " ";
}
}
}
++i;
}
}
gotoXY(hOut, 36, 1);
cout << fraction;
gotoXY(hOut, 36, 2);
cout << checkpoint;
}
俄罗斯方块
宋婉婷在2018-03-31 10:31:41追加了内容
请勿举报
0
0
0
宫西诚
修练者
修练者
#include<iostream.h> #include<windows.h> #include<time.h> #include<stdlib.h> #include<conio.h> #define N 21 void gotoxy(int x,int y)//位置函数 { COORD pos; pos.X=2*x; pos.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } void color(int a)//颜色函数 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a); } void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果) { int i,j;//初始化围墙 int wall[N+2][N+2]={{0}}; for(i=1;i<=N;i++) { for(j=1;j<=N;j++) wall[i][j]=1; } color(11); for(i=0;i<N+2;i++) { for(j=0;j<N+2;j++) { if(wall[i][j]) cout<<"■"; else cout<<"□" ; } cout<<endl; } gotoxy(N+3,1);//显示信息 color(20); cout<<"按 W S A D 移动方向"<<endl; gotoxy(N+3,2); color(20); cout<<"按任意键暂停"<<endl; gotoxy(N+3,3); color(20); cout<<"得分:"<<endl; apple[0]=rand()%N+1;//苹果 apple[1]=rand()%N+1; gotoxy(apple[0],apple[1]); color(12); cout<<"●"<<endl; } int main() { int i,j; int** snake=NULL; int apple[2]; int score=0; int tail[2]; int len=3; char ch='p'; srand((unsigned)time(NULL)); init(apple); snake=(int**)realloc(snake,sizeof(int*)*len); for(i=0;i<len;i++) snake[i]=(int*)malloc(sizeof(int)*2); for(i=0;i<len;i++) { snake[i][0]=N/2; snake[i][1]=N/2+i; gotoxy(snake[i][0],snake[i][1]); color(14); cout<<"★"<<endl; } while(1)//进入消息循环 { tail[0]=snake[len-1][0]; tail[1]=snake[len-1][1]; gotoxy(tail[0],tail[1]); color(11); cout<<"■"<<endl; for(i=len-1;i>0;i--) { snake[i][0]=snake[i-1][0]; snake[i][1]=snake[i-1][1]; gotoxy(snake[i][0],snake[i][1]); color(14); cout<<"★"<<endl; } if(kbhit()) { gotoxy(0,N+2); ch=getche(); } switch(ch) { case 'w':snake[0][1]--;break; case 's':snake[0][1]++;break; case 'a':snake[0][0]--;break; case 'd':snake[0][0]++;break; default: break; } gotoxy(snake[0][0],snake[0][1]); color(14); cout<<"★"<<endl; Sleep(abs(200-0.5*score)); if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1 { score++; len++; snake=(int**)realloc(snake,sizeof(int*)*len); snake[len-1]=(int*)malloc(sizeof(int)*2); apple[0]=rand()%N+1; apple[1]=rand()%N+1; gotoxy(apple[0],apple[1]); color(12); cout<<"●"<<endl; gotoxy(N+5,3); color(20); cout<<score<<endl; } if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败 { gotoxy(N/2,N/2); color(30); cout<<"失败!!!"<<endl; for(i=0;i<len;i++) free(snake[i]); Sleep(INFINITE); exit(0); } } return 0;
0
王星河
资深光能
资深光能
0