IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 用C语言写坦克大战 -> 正文阅读

[C++知识库]用C语言写坦克大战

????????今天,我们来用C语言写一个坦克大战小游戏。

? ? ? ? 首先,上代码。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
 
HANDLE hout;
char zt;
int yz,xz,ht,wz,fen,jb;
int hp=10;
void gotoxy(int x,int y)  			
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}
char getInput()
{
    int ch; 
     
    COORD coord; 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
 
    coord.X=10;
    coord.Y=10;
    if(3-fen==0)
	{
		system("cls");
		gotoxy(26,12);
		printf("你赢了!"); 
   		gotoxy(26,14);
   		printf("最终得分:%d分",fen);
   		while(1)
   		{
   			Sleep(32767);
		}
	}
   	if(hp==0)
   	{
   		Sleep(20);
   		system("cls");
   		gotoxy(26,12);
   		printf("你输了!");
   		gotoxy(26,14);
  		printf("最终得分:%d分",fen);
   		while(1)
   		{
   			Sleep(32767);
		}
	}
	if(coord.X>40&&coord.Y<10)
    {
    	hp=hp-1;
     	gotoxy(72,1);
      	printf("%d滴",hp);
       	gotoxy(76,3);
       	printf("%d辆",3-fen);
       	gotoxy(67,5);
   		printf("%d分",fen);
		}
	if(coord.X>40&&coord.Y>20)
	{
       	hp=hp-1;
       	gotoxy(72,1);
       	printf("%d滴",hp);
       	gotoxy(76,3);
       	printf("%d辆",3-fen);
       	gotoxy(67,5);
   		printf("%d分",fen);
	}
	if(coord.Y>20&&coord.X<18)
	{
       	hp=hp-1;
       	gotoxy(72,1);
       	printf("%d滴",hp);
       	gotoxy(76,3);
       	printf("%d辆",3-fen);
       	gotoxy(67,5);
   		printf("%d分",fen);
	}
	if(coord.X<10&&coord.Y<10)
	{
		hp=hp+2;
		gotoxy(72,1);
       	printf("%d滴",hp);
	}
 
    ch=getch();
 
    while(ch==0xE0||ch==0x0d)
    {
        GetConsoleScreenBufferInfo(hout,&csbi);
        coord.X=csbi.dwCursorPosition.X; 
        coord.Y=csbi.dwCursorPosition.Y; 
     	gotoxy(72,1);
       	printf("%d滴",hp);
       	gotoxy(76,3);
       	printf("%d辆",3-fen);
       	gotoxy(67,5);
       	printf("%d分",fen);
       	wz=coord.X*coord.Y;
       	if(3-fen==0)
       	{
       		system("cls");
       		gotoxy(26,12);
       		printf("你赢了!"); 
       		gotoxy(26,14);
       		printf("最终得分:%d分",fen);
       		while(1)
       		{
       			Sleep(32767);
			}
		}
       	if(hp==0)
       	{
       		Sleep(20);
       		system("cls");
       		gotoxy(26,12);
       		printf("你输了!");
       		gotoxy(26,14);
       		printf("最终得分:%d分",fen);
       		while(1)
       		{
       			Sleep(32767);
			}
		}
        if(coord.X>40&&coord.Y<10)
        {
        	hp=hp-1;
        	gotoxy(72,1);
        	printf("%d滴",hp);
	       	gotoxy(76,3);
	       	printf("%d辆",3-fen);
	       	gotoxy(67,5);
       		printf("%d分",fen);
		}
		if(coord.X>40&&coord.Y>20)
		{
        	hp=hp-1;
        	gotoxy(72,1);
        	printf("%d滴",hp);
        	gotoxy(76,3);
	       	printf("%d辆",3-fen);
	       	gotoxy(67,5);
       		printf("%d分",fen);
		}
		if(coord.Y>20&&coord.X<18)
		{
        	hp=hp-1;
        	gotoxy(72,1);
        	printf("%d滴",hp);
        	gotoxy(76,3);
	       	printf("%d辆",3-fen);
	       	gotoxy(67,5);
       		printf("%d分",fen);
		}
		if(coord.X<10&&coord.Y<10)
		{
			hp=hp+2;
			gotoxy(72,1);
        	printf("%d滴",hp);
		}
        //如果是回车
        if(ch==0x0d)
        {
            coord.X=0;
            coord.Y++;
            SetConsoleCursorPosition(hout,coord);
            break;
        }
        ch=getch();
        //上
        if(ch==0x48)
        {
            if(coord.Y!=0)
            {
            	if (zt==1)
            	{
            		yz=coord.Y;
            		yz=yz-1;
            		xz=coord.X;
            		system("cls");
            		system("type map.map");
            		gotoxy(xz,yz);
            		coord.Y--;
					printf(" =[0]");
				}else{
					yz=coord.Y;
            		yz=yz-1;
            		xz=coord.X;
            		system("cls");
            		system("type map.map");
            		gotoxy(xz,yz);
            		coord.Y--;
					printf("[0]= ");
				}
			}
        }
 
        //下
        else if(ch==0x50)
        {
            if (zt==1)
            	{
            		yz=coord.Y;
            		yz=yz+1;
            		xz=coord.X;
            		system("cls");
            		system("type map.map");
            		gotoxy(xz,yz);
            		coord.Y++;
					printf(" =[0]");
				}else{
					yz=coord.Y;
            		yz=yz+1;
            		xz=coord.X;
            		system("cls");
            		system("type map.map");
            		gotoxy(xz,yz);
            		coord.Y++;
					printf("[0]= ");
				}
        }
 
        //左
        else if(ch==0x4b)
        {
            if(coord.X!=0){xz=coord.X--;yz=coord.Y;gotoxy(0,0);system("type map.map");gotoxy(xz,yz);printf("=[0]  \b");zt=1;}
        }
 
        //右
        else if(ch==0x4d)
        {
            if(coord.X!=79){xz=coord.X++;yz=coord.Y;gotoxy(0,0);system("type map.map");gotoxy(xz,yz);printf("\b  [0]=");zt=2;}
            else
            {
                coord.X=0;
                coord.Y++;
            }
        }
 
        SetConsoleCursorPosition(hout,coord);
        ch=getch();
 
 
    }
    return ch;
    }
 
 
void main()
{
	system("mode con cols=80 lines=42");
	CONSOLE_CURSOR_INFO cursor_info = {1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
	system("title 坦克大战"); 
	system("color 27");
	system("type map.map");
	gotoxy(4,2);
	printf("[0]=\b\b\b");
    char ch;
   	gotoxy(72,1);
  	printf("%d滴",hp);
  	gotoxy(76,3);
	printf("%d辆",3-fen);
	gotoxy(67,5);
   	printf("%d分",fen);
    hout=GetStdHandle(STD_OUTPUT_HANDLE);
    gotoxy(4,2);
	MessageBox(NULL, TEXT("恭喜你获得上线大奖——穿墙外挂!按确定键领取大奖。"), TEXT("坦克大战"), MB_OK);
    while(1)
    {
        ch=getInput();
        if (ch=='g')
        {
			CONSOLE_CURSOR_INFO cursor_info = {1,1};
			SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
		}
		if (ch=='h')
		{
			CONSOLE_CURSOR_INFO cursor_info = {1,0};
			SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
		}
		if (ch==' ')
		{
			if (zt==1)
			{
				fen=fen+1;
				ht=36;
				while(ht-1)
				{
					ht=ht-1;
					printf("*");
					Sleep(20);
					printf("\b \b\b");
				}
				printf("                                     \b=[0]\b\b\b\b\b");
			}
			if (zt==2)
			{
				fen=fen+1;
				printf("[0]=");
				ht=24;
				while(ht-1)
				{
					ht=ht-1;
					printf("*");
					Sleep(20);
					printf("\b ");
				}
				printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
			}
		}
    }
 
 
    getchar();
     
}

?这个程序全部是printf()函数打印出来的,利用了控制台光标,让控制台光标随意移动,而坦克随着控制台光标走。而开炮系统使用了while循环,让炮弹向前走。当你走进敌方坦克的攻击范围内,你就会不断掉血,你要打败3个敌人,当然,回到你的出生点会让你无上限的加血。当然,因为作者技术有限,坦克有一个穿墙的BUG,作者也没办法,就在开局给了玩家一个穿墙外挂,这样也好解释这个BUG。至于炮弹穿墙的话,作者本来意愿就是这样的。就算有这两个外挂(BUG),要是没有掌握游戏机制的话,也会死的很惨,但你要是摸清了游戏机制,那就会很容易。

操作方法:方向键移动,空格键开炮,就这几个操作,不多。

有改进了的可以一起交流~

?

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:19:22  更:2021-08-01 14:21:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 6:19:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码