问题标题: 酷町堂:帮助你写游戏的帖子(板块变化)

0
1
已解决
王梓澳
王梓澳
中级光能
中级光能

很多同学反应上次的板块出问题无法复制代码

所以,作者我从新发一遍,特地看了看我的板块准确无误

内容差不多,有一些些改进,希望能帮助到大家哈

废话不多说,正片开始!

 

 

很多童鞋想写属于自己游戏代码,毕竟是自己的,玩起来也更好玩(最重要是荣誉感)

那么下面作者推荐几个基**函数

//1、清屏函数
**("cls");
//需要头文件#include <windows.h>
//我知道有不闪烁清屏。。。
//先这个吧,这个简单一点

清屏函数,作者第一个小游戏猜数小游戏就用到了哈

这个函数还是比较实用的,对于文字游戏来说,不想接太长就用这个

或者是写剧情的时候会用这个,比如作者最近发布的模仿超级玛丽的小游戏里面的剧情就有(剧情太狗血了)

这个函数还有一个用法就是可以用于简单的动态游戏

比如作者发布的**小游戏(当然作者会完善,太复杂了都不好**了。。。),缺点就是太闪了(我知道有不闪清屏),闪瞎了我的眼。。。

 

 

//2、延时函数
Sleep(x)
//需要头文件#include <windows.h>
//x为数字,1代表1毫秒,1s=1000ms

这个的话基本都能用上

动态游戏用法:

while (true) {
    //清屏或覆盖
    //代码段
    //输出段
    Sleep(80);//数字根据自己需要改变
}
//如果不加这个函数,很可能运行窗口关不掉,而且内存超负荷,电脑会很卡
//这个也是控制流畅的关键

文字游戏或剧情延时输出:

void out(st**ng a) {
	for (int i=0;i<a.size();i++) {
		cout<<a[i];
		Sleep(50);//这里是控制延时快慢,数字越大延时越长(单位毫秒)
	}
}//我定义的名字叫out,名字随意
//用法呢很简单,看上面的模仿超级玛丽的截屏,里面out就是这个
//out("123456对对对")

 

//3、键盘处理器
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
//看着开头的#define就知道是何头文件放在一起的
//这个是个函数,判断键盘某键是否按下(移动键和回车等是有编号的,作者记得看过,但是目前找不到)
//如果判断字母键很简单的 如KEY_DOWN('W') w按下返回1,w没有按下返回0

这里作者记得KEY_DOWN函数回车什么无法显示的特殊字符是有编号的,但是目前没查到当时那个网站

这里上面的图片是作者**游戏里面的,这里的VK_ESCAPE是Esc键,其余的也是有编号的,如回车,数字键

这里还有一个用法就是文字游戏盒剧情里面会用

按下XX键继续(任意键又一个特殊的一下就能搞定)

while (!KEY_DOWN('Z'));
//这里是按下z继续
//如果需要不同可以改

 

//4、
void color(int a) {
	SetConsoleTextAtt**bute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
//调整颜色的函数,效果和**("color")一样,但是快

这里是颜色表,找不到原来的表格了。。。

就从上一期截图发一下,不过就是些数字,问题也不打哈

color(7)是原始颜色(如果你调颜色了,那就不是了),用完可以恢复

//5、控制输出位置
void SetPos(COORD a) {
	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleC**sorPosition(out, a);
}
void SetPos(int i, int j) {
	COORD pos={i, j};
	SetPos(pos);
}
//这个函数控制输出位置,在屏幕上的坐标,用的时候如SetPos(0,0)(初始位置)
//注意一下是先y后x(先列后行)
//这个呢有覆盖特**(两次在同一位置输出,后面输出的会覆盖掉前面的),也可以通过这个实现动态(下面有例子)

 

例1:构造游戏界面

打游戏的都知道,游戏开始前一般都会有一个高大上的界面(当然在黑框框里面式做不出来的,要做的话到工程里面)

那么基**的界面

作者做了两个效果:

效果1

效果2

首先看一下低配版本(闪瞎你的眼睛)

用**("cls")实现,会很闪(例为效果1)

while (true) {
		cout<<"╭══════╮\n";//这个是边界,自己改符号就好
		cout<<"║";//边界字符,效果图放出来就晓得了
		if (i==1) {
			color(14);//效果1例子,是变色版
			if (KEY_DOWN('Z')) in_con();//这里是按下z选中,如果是其他的可以改,判断后面放你需要的内容,以下同理
		}cout<<"  控制介绍  ";color(7);//这里是效果1,所以恢复
		cout<<"║\n";//边界图标
		cout<<"║";
		if (i==2) {
			color(14);
			if (KEY_DOWN('Z')) in_cont();
		}cout<<"  内容介绍  ";color(7);
		cout<<"║\n║";
		if (i==3) {
			color(14);
			if (KEY_DOWN('Z')) ret**n ;
		}cout<<"  跳出介绍  ";color(7);
		cout<<"║\n";
		cout<<"╰══════╯\n";
		if (KEY_DOWN('W')&&i-1!=0) i--;//这里是上调w,如果按键变化可以改,其他一般不要改
		if (KEY_DOWN('S')&&i+1<=3) i++;//这里i+1<=3的数字3可以根据数目改变,下调s也可以改变
		Sleep(100);//延时函数,感觉不顺的可以改(这个版本小了闪瞎你)
	}

不闪的版本,通过SetPos的覆盖特**实现(效果2)

while (true) {
	SetPos(2,5);cout<<" ";//利用覆盖特**消除箭头
	SetPos(2,6);cout<<" ";
	SetPos(2,7);cout<<" ";
	if (i==1) {
		if (KEY_DOWN('Z')) ret**n ;//跟上一个例子基本相同,按下z选中,后面加**需要的东西,以下同理
		SetPos(2,5);color(14);cout<<">";color(7);//在合适的位置加上>(这里颜色设置的是**)
	}SetPos(3,5); cout<<"开始游戏";//在合适的位置输出字,第2个数字相同(错位了,第二个就不同了)
	if (i==2) {
		//color(14);
		if (KEY_DOWN('Z')) in_con();//不动
		SetPos(2,6);color(14);cout<<">";color(7);//删除
	}SetPos(3,6);//删除
	cout<<"查看介绍";//这里加上color(7)//如果想要通过这种实现效果1,根据if 2里面的注释写
	if (i==3) {
		if (KEY_DOWN('Z')) update();
		SetPos(2,7);color(14);cout<<">";color(7);
	}SetPos(3,7); cout<<"更新内容";
	if (KEY_DOWN('W')&&i-1>=1) i--;
	if (KEY_DOWN('S')&&i+1<=3) i++;//这里和后面一样的,就不多讲了
	Sleep(100);
}

例2:SetPos移动示例

#include <bits/stdc++.h>
#include <windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)//判断按键是否按下(前面有)
using name** std;
struct play {//定义一个结构体,看上去好点(实际上没有也行)
	int x,y,lx,ly;
}player;//玩家
void SetPos(COORD a)//SetPos
{
	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleC**sorPosition(out, a);
}
void SetPos(int i, int j)
{
	COORD pos={i, j};
	SetPos(pos);
}
void cont**l() {//控制函数,这里是wsad**作方法,没有限制最大,可以满屏跑
	player.ly=player.y;player.lx=player.x;//记录上次的位置,以便覆盖痕迹
	if (KEY_DOWN('W')&&player.x-1>=1) player.x--;
	if (KEY_DOWN('S')) player.x++;
	if (KEY_DOWN('A')&&player.y-1>=1) player.y--;
	if (KEY_DOWN('D')) player.y++;
}
int main () {
	player.x=9,player.y=9;//初始位置,随便哈
	while (true) {
		SetPos(player.ly,player.lx);//先覆盖上次的痕迹,为什么?有可能没有动,上次这次在一起,如果先输出这次那不没有东西了?
		cout<<" ";//覆盖,看是几个空格的长度,有的可能有两行
		SetPos(player.y,player.x);//输出这次玩家的位置
		cout<<"1";//这里方便,用1代替,其他字符也是可以的
		cont**l();//控制函数
		Sleep(50);//延时函数,数字可以改,自己看着舒服就好
	}
	ret**n 0;
}

先到这里吧,后面作者学会了新的东西再更新

王梓澳在2021-08-04 14:45:30追加了内容

作者发布的时候出现了一点问题,502了,吓**作者了,写了那么久。。。

大部分还是在的,中间一点小问题,纠正一下

1、

几个基本函数

2、

图片为

3、

**小游戏    都不好改了

4、

图片:

5、

**游戏

6、

颜色表

7、

效果1

效果2

**

覆盖特**

 

王梓澳在2021-08-04 14:48:19追加了内容

图片发不出来。。。

我人都傻了

https://wenda.codingtang.com/questions/13556/

这里面有图片什么的

只是板块不对

大家看一下吧,图片出不来,而且一些字变**了

王梓澳在2021-08-04 14:50:31追加了内容

**图片的话还有是截取代码的

一个是超级玛丽的story函数

还有一个是**游戏的465行的if函数

王梓澳在2021-08-05 08:23:37追加了内容

图1代码

void story() {
	color(7);
	cout<<"剧情篇\n";
	cout<<"按下Z继续\n";
	cout<<"按下Q跳过";
	while (true) {
		if (KEY_DOWN('Z')) break;
		if (KEY_DOWN('Q')) ret**n ;
	}**("cls");
	out("一天你睡觉时,突然梦见你一人站在一个空无一人的地方...\n");
	cout<<"按下Z继续\n";
	cout<<"按下Q跳过";
	while (true) {
		if (KEY_DOWN('Z')) break;
		if (KEY_DOWN('Q')) ret**n ;
	}**("cls");
	out("一个声音对你说:你的灵魂已破碎不堪\n你向四周看去,没有任何人\n");
	out("接着你醒来了,你去请求神灵,发现梦里的话是真实的...\n");
	cout<<"按下Z继续\n";
	cout<<"按下Q跳过";
	while (true) {
		if (KEY_DOWN('Z')) break;
		if (KEY_DOWN('Q')) ret**n ;
	}**("cls");
	out("神灵问:你想要一个完整的灵魂吗?\n你毫不犹豫的回答道:想!\n");
	out("“我已将你的灵魂碎片散落在一个地方,你收集到所有碎片才能获得完整的灵魂,当然,这也会有危险,你愿意吗?”\n“我愿意!”");
	out("突然你被传送到一个二维世界的地图中...\n");
	cout<<"按下Z继续\n";
	while (!KEY_DOWN('Z'));
}

图2代码:

if (KEY_DOWN(VK_ESCAPE))
	Opening();

颜色表(作者找到了)

/*
<span style="white-**:pre">	</span>字 
	1	深蓝色
	2	深绿色
	3	深青色 
	4	深红色
	5	深粉色
	6	**
	7	深白色
	8	灰色
	9	浅蓝色
	10	浅绿色 
	11	浅青色 
	12	浅红色 
	13	浅粉色 
	14	浅** 
	15	浅白色 
	
	背景
	1~15		黑色 
	16~31		深蓝色 
	32~47		深绿色
	48~63		深青色
	**~79		深红色
	80~95		深粉色
	**~111		深**
	112~127 	深白色
	128~143 	灰色
	144~159 	浅蓝色
	160~175 	浅绿色
	176~191 	浅青色
	192~207 	浅红色
	208~223 	浅粉色
	224~239 	浅**
	240~255 	浅白色
*/

由于是别人的文章,作者贴上原文网址:https://blog.**dn.net/**rlasting_20141622/article/details/52222006

 

王梓澳在2021-08-05 08:25:11追加了内容

博客的网址好像打不开。。。

网址都被贴上**了,这个**是什么啊。。。

王梓澳在2021-08-05 08:27:02追加了内容

原文网址

王梓澳在2021-08-05 11:23:52追加了内容

作 者 在 翻 问答的时候,发现了有人给过KEY_DOWN的表格了

转载一下 ,@吴庞茂旭 谢谢哈

/*
    VK_**UTTON             鼠标左键                      0x01 
    VK_RBUTTON             鼠标右键                      0x02 
    VK_CANCEL              Ctrl + Break                  0x03 
    VK_MBUTTON             鼠标中键                      0x04 
 
    VK_BACK                Back** 键                   0x08 
    VK_TAB                 Tab 键                        0x09 
 
    VK_RET**N              回车键                        0x0D 
 
 
    VK_SHIFT               Shift 键                      0x10 
    VK_CONTROL             Ctrl 键                       0x11 
    VK_MENU                Alt 键                         0x12 
    VK_PAUSE               P**se 键                      0x13 
    VK_CAPITAL             Caps Lock 键                  0x14 
 
    VK_ESCAPE              Esc 键                        0x1B 
 
    VK_SPACE               空格键                       0x20 
    VK_PRIOR               Page Up 键                    0x21 
    VK_NEXT                Page Down 键                  0x22 
    VK_END                 End 键                        0x23 
    VK_HOME                Home 键                       0x24 
    VK_LEFT                左箭头键                      0x25 
    VK_UP                  上箭头键                      0x26 
    VK_RIGHT               右箭头键                      0x27 
    VK_DOWN                下箭头键                      0x28 
    VK_SNAPSHOT            P**nt Screen 键               0x2C 
    VK_Insert              Insert 键                     0x2D 
    VK_Delete              Delete 键                     0x2E 
 
    '0' – '9'             数字 0 - 9                    0x30 - 0x39 
    'A' – 'Z'             字母 A - Z                    0x41 - 0x5A 
 
    VK_LWIN                左WinKey(104键盘才有)         0x5B 
    VK_RWIN                右WinKey(104键盘才有)         0x5C 
    VK_APPS                AppsKey(104键盘才有)          0x5D 
 
    VK_NUMPAD0            小键盘 0 键                    0x60 
    VK_NUMPAD1            小键盘 1 键                    0x61 
    VK_NUMPAD2            小键盘 2 键                    0x62 
    VK_NUMPAD3            小键盘 3 键                    0x63 
    VK_NUMPAD4            小键盘 4 键                    0x** 
    VK_NUMPAD5            小键盘 5 键                    0x65 
    VK_NUMPAD6            小键盘 6 键                    0x66 
    VK_NUMPAD7            小键盘 7 键                    0x67 
    VK_NUMPAD8            小键盘 8 键                    0x68 
    VK_NUMPAD9            小键盘 9 键                    0x69 
 
    VK_F1 - VK_F24        功能键F1 – F24                0x70 - 0x87 
 
    VK_NUMLOCK            Num Lock 键                    0x90 
    VK_SCROLL             Sc**ll Lock 键                 0x91 
*/

 

王梓澳在2021-08-05 17:23:28追加了内容

界面制作第1个s y s t e m 版本少清屏函数

在while(true)后面加一个s y s t e m  ("c  l  s");(被迫打空格)

游戏界面刷新不了


0
已采纳
肖俊宁
肖俊宁
高级守护
高级守护

对游戏新手很有帮助(尤其是我)

6﹝¯﹀¯﹞6

0
0
王文博
王文博
缔造者之神
缔造者之神

有些字变成了**????

0
0
0
张恩泽
张恩泽
高级天翼
高级天翼

额,这些*号严重影响阅读体验

0
武建豪
武建豪
中级天翼
中级天翼

说实话,图片一个看不见

0
我要回答