CC++游戏项目完整教程:《坦克大战》

《坦克大战》以二战坦克为题材,既保留了射击类游戏的操作性,也改进了射击类游戏太过于复杂难玩的高门槛特点,集休闲与竞技于一身。经典再度袭来,流畅的画面,疯狂的战斗,让玩家再次进入疯狂坦克的世界。玩家的目标是控制坦克躲避危险,消灭掉所有的敌人即可进入下一关。

话不多说

我们今天就来创造出属于我们自己的《坦克大战》,GOGOGO!!!

直接开始吧

这次的源码比较详细,我分了好几个cpp文件,思路更加的清晰,请耐心用心的观看

首先就是我们载入图片的函数tupian.cpp

# include "tanke.h"

障碍物
void LaoWang(int * tilex, int * tiley)
{
	IMAGE img;
	loadimage(&img, _T("res\tile.bmp"));
	
	putimage(*tilex, *tiley, 32 , 32 , &img, 32 * 5, 0 );
	
}
void tileHong(int * tilex, int * tiley)
{
	IMAGE img;
	loadimage(&img, _T("res\tile.bmp"));
	
	putimage(*tilex, *tiley, 32, 32, &img, 32 * 0,  0 );
	
	return;
	
}

void tileLv(int * tilex, int * tiley)
{
	IMAGE img;
	loadimage(&img, _T("res\tile.bmp"));
	
	putimage(*tilex, *tiley, 32, 32, &img, 32 * 2, 0 );
	return;
}

void tileBai(int * tilex, int * tiley)
{
	IMAGE img;
	loadimage(&img, _T("res\tile.bmp"));
	
	putimage(*tilex, *tiley, 32, 32, &img, 32 * 1, 0 );
	return;
}

void tileBlue(int *tilex, int *tiley)
{
	IMAGE img;
	loadimage(&img, _T("res\tile.bmp"));
	
	putimage(*tilex, *tiley, 32, 32, &img, 32 * 3, 0 );
}
//物品
void FaZhang(int *wupinx, int *wupiny)
{
	IMAGE img;
	loadimage(&img, _T("res\fazhang.jpg"));
	
	putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 );
}

void ShouQiang(int *wupinx, int *wupiny)
{
	IMAGE img;
	loadimage(&img, _T("res\shouqiang.jpg"));
	
	putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 );
}

void ShangDian(int *wupinx, int *wupiny)
{
	IMAGE img;
	loadimage(&img,_T("res\shangdian.jpg"));
	
	putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 );
}

void YaoShui(int *wupinx, int *wupiny)
{
	IMAGE img;
	loadimage(&img, _T("res\yaoshui.jpg"));

	putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 );
}

void DunPai(int *wupinx, int *wupiny)
{
	IMAGE img;
	loadimage(&img, _T("res\dunpai.jpg"));
	
	putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 );
}

void XieZi(int *wupinx, int *wupiny)
{
	IMAGE img;
	loadimage(&img, _T("res\xiezi.jpg"));
	
	putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 );
}

void Boss(int *wupinx, int *wupiny)
{
	IMAGE img;
	loadimage(&img, _T("res\boss.jpg"));
	
	putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 );
}

void BigBoss(int *wupinx, int *wupiny)
{
	IMAGE img;
	loadimage(&img, _T("res\bigboss.jpg"));

	putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 );
}

接下来是初始化的函数waiyuan.cpp

# include "tanke.h"

/外部
void JShengMing(int *j)
{
	setcolor(GREEN);
	settextstyle(0, 0, ("宋体"));
	char c2[20] = "自己生命值:";
	outtextxy(0, 20, c2);
	
	char c3[10] ;
	sprintf(c3, _T("%.1f"), 100* (60 - *j) / 60.0);
	outtextxy(90, 20, c3);
}

void DShengMing(int * d,int *k)
{
	setcolor(GREEN);
	settextstyle(0, 0, ("宋体"));
	char c2[20] = "敌人生命值:";
	outtextxy(0, 0, c2);
	
	char c3[10] ;
	sprintf(c3, _T("%.1f"), 100* (60 - *d) / 60.0);
	outtextxy(90, 0, c3);

	char c4[40] = "恭喜~! 现在起金币到2200有惊喜!";//胜利

	if ( *k >= 8000 )
			{
				setcolor(YELLOW);
				settextstyle(30, 0, ("宋体"));

				outtextxy(150, 0, c4);
			}
}

void Gold(int * gold)
{
	setcolor(GREEN);
	settextstyle(0, 0, ("宋体"));
	char c2[20] = "金币:";
	outtextxy(0, 40, c2);
	
	char c3[10] ;
	sprintf(c3, _T("%d"), *gold);
	outtextxy(40, 40, c3);
}

void start(void)
{
	initgraph(200, 130);

	TCHAR s1[10]="坦克大战";
	TCHAR s2[30]="按A 开始游戏  按B 退出游戏";
	TCHAR s3[30]="按W S A D控制方向";
	TCHAR s4[20]="按J 发射子弹";
	TCHAR s5[20]="按C 看攻略";
	
	outtextxy(70, 0, s1);
	outtextxy(0,  110, s2);
	outtextxy(60, 90, s5);
	outtextxy(55, 30, s4);
	outtextxy(35, 60, s3);
	
	while (true)
	{
		Sleep(500);
		if (GetAsyncKeyState('A'))
		{
			BeginBatchDraw();
			closegraph();
			initgraph(640, 480);
			Sleep(200);
			Quit();
			return ;
		}	
		if (GetAsyncKeyState('C'))
		{
			Sleep(200);
			GongLue();
		}
	}
}
void GongLue(void)
{	
	initgraph(450, 300);
	TCHAR s1[20]="游戏攻略:";
	TCHAR s2[50]="再打坦克之前先吃法杖打掉白色砖块,";
	TCHAR s3[50]="这样敌坦克打白色就不能回血了,boss更应如此。";
	TCHAR s15[70]="吃盾牌的作用就是可以碾压对手";
	TCHAR s4[50]="打大坦克的时候,别和它对子弹这样会吃亏";
	TCHAR s5[70]="可以直接选择上去碾压它 注意:当血足够少的时候走开,";
	TCHAR s6[50]="用子弹打它这样才能得到钱,";
	TCHAR s7[70]="小boss可以反复刷,虽然挣不到钱,但复活次数更需要。";
	TCHAR s14[70]="吃手枪虽然速度快了但伤害会减少,但打绿boss时伤害反而增加";
	TCHAR s8[70]="血要多吃,肯定划算,钱少了好挣,复活少了,就难挣了。";
	TCHAR s9[50]="打终极boss时,记得要用大子弹打它伤害才能打出来。";
	TCHAR s10[90]="最后温馨提示:有块红砖比较可疑~";
	TCHAR s11[40]="最后:别想着跑后面去打终极Boss了";
	TCHAR s12[30]="因为你超过它会直接被秒。";
	TCHAR s13[30]="按A 开始游戏";
	
	outtextxy(0, 0,  s1);
	outtextxy(0, 20, s2);
	outtextxy(0, 40, s3);
	outtextxy(0, 60, s15);
	outtextxy(0, 80, s4);
	outtextxy(0, 100, s5);
	outtextxy(0, 120, s6);
	outtextxy(0, 140, s14);
	outtextxy(0, 160, s7);
	outtextxy(0, 180, s8);
	outtextxy(0, 200, s9);
	outtextxy(0, 220, s10);
	outtextxy(0, 240, s11);
	outtextxy(0, 260, s12);
	outtextxy(0, 280, s13);
	
	while (true)
	{
		Sleep(500);
		if (GetAsyncKeyState('A'))
		{
			keybd_event(65,0,0,0);
			keybd_event(65,0,KEYEVENTF_KEYUP,0);
			return ;
		}	
	}
	
}

void MiJi(void)
{		
	closegraph();

	printf("游戏秘籍:
");
	printf("恭喜你通关了,
");
	printf("告诉你些游戏作弊方法~!。
");
	printf("当你一直按住子弹不松的话 ,还有直接控制 子弹功能哦~~

");
	printf("哈哈 另外小技巧。打boss前 先把小坦克都压了
");
	printf("只留一个,因为boss出来 基地就危险了
");
	printf("还有 有的人 觉得花了600块的大子弹没伤害没用
");
	printf("我只能说他的用法不对 不是一下一下的点,

");
	printf("而是一直按着然后松开 那伤害高到 爆~!终极boss都打一半血!

");
	printf("还有 就是 就算Gameover了 不算输,我还留了一手

");
	printf("你把所有敌坦克都杀了 再按 Y

");
	printf("这时候你的基地就复活了,

");
	printf("~~嘘~~~~~~~~~~~~~~~~~~~~~~~~~~~

");
	printf("另外:小坦克靠近基地时
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值