问题标题: 帮助你写游戏的帖子

2
3
已解决
王梓澳
王梓澳
中级光能
中级光能

很多同学想要写一个属于自己的游戏

那么作者的酷町豆比较充裕,就花10个发个贴帮大家

写游戏,肯定要学会一些特别的函数

下面几个作者推荐:

//1、清屏函数
system("cls");

这个函数在编游戏中特别实用,无论是文字体系的游戏(像网上的王子救公主)还是动态(比如打飞机)的游戏都可以用到

文字的可以使用使屏幕上的信息减少,一目了然,动态它就是原理,通过它来清屏输出,唯一的就是要加Sleep函数(下一个)来延时,否则屏幕可能会很卡,内存占用高

//2、延时函数
Sleep

这个函数应该是编写游戏必备的,这个函数用法很简单,Sleep(1000)是延时1秒,那么自己换算一下

主要功能是延时输出和防止内存占用过多导致游戏卡顿

//延时输出
void out(string a) {//这里带入一个字符串,可以直接像cout一样使用
	for (int i=0;i<a.size();i++) {//挨个输出里面的字符
		cout<<a[i];
		Sleep(50);//这个参数可以改,调整输出速度
	}
}
while (true) {
	system("cls");
	//游戏内容
	Sleep(100);
}
//实现动态界面

第3个文字体系可能用的不多,控制类别的比较常用

//3、键盘函数
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)

这函数网上有,KEY_DOWN,判断键盘是否按下,使用方法如:

KEY_DOWN('W')
//如果w键按下,那么返回1,没有按下返回0

第4个

void color(int a) {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}

这个和system("color")的用法相同,但是时间复杂度短,不容易抽搐

用数字,以下是表:

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

*/

用过后的cout会带有颜色,用完如果恢复的话color(7)就可以了

还有一个不是很常使用,但是可以让你的游戏美观(作者还没熟练掌握)

//控制输出位置函数
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);
}
//所实话作者也看不懂

在使用这个函数之后的第一个cout会改变输出位置,里面填坐标

最后写游戏一般两个头文件

#include <bits/stdc++.h>//万能头
#include <windows.h>//Sleep,后面自定义函数的头文件

如果还有需要,可以上网查

王梓澳在2021-05-14 18:11:46追加了内容

作者昨天被额。。。

学会了以上就可以构造一个界面

游戏瞬间就高大上了

int i=1;
while (true) {
	system("cls");
	cout<<"______________\n";
	cout<<"|";
	if (i==1) {
		color(14);
		if (KEY_DOWN('Z')) cout<<"2";
	}cout<<"  控制介绍  ";color(7);
	cout<<"|\n";
	cout<<"|";
	if (i==2) {
		color(14);
		if (KEY_DOWN('Z')) cout<<"1";
	}cout<<"  内容介绍  ";color(7);
	cout<<"|\n";
	cout<<"|";
	if (i==3) {
		color(14);
		if (KEY_DOWN('Z')) return ;
	}cout<<"  跳出介绍  ";color(7);
	cout<<"|\n";
	cout<<"______________\n";
	if (KEY_DOWN('W')&&i-1!=0) i--;
	if (KEY_DOWN('S')&&i+1<=3) i++;
	Sleep(100);
}

 

王梓澳在2021-05-21 18:51:51追加了内容

作者理解了SetPos的精髓

这个东西可以不让你的东西卡顿

#include <bits/stdc++.h>
#include <windows.h> 
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
struct play {
	int x,y,lastx,lasty;
}player;
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 control() {
	player.lastx=player.x;player.lasty=player.y;//将玩家上一次的位置储存下来
	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.lasty,player.lastx);
		cout<<" ";//销毁上次移动的痕迹
		SetPos(player.y,player.x);
		cout<<"1";//将这次痕迹留下来
		control();//控制函数
		Sleep(50);//适当延时,防止跑太快,数据可以改
	}
	return 0;
}

这个比清屏函数好一点

王梓澳在2021-08-01 11:23:22追加了内容

作者前面的游戏界面有点闪(眼睛看着不舒服)

于是作者从新写了一个游戏界面

效果如下

如果想用变色版的

只要小小调整一下就好了

这个界面不闪烁

int i=1;
while (true) {
	SetPos(2,5);cout<<" ";//利用SetPos的覆盖特性将上一次的覆盖掉
	SetPos(2,6);cout<<" ";
	SetPos(2,7);cout<<" ";
	if (i==1) {
		if (KEY_DOWN('Z')) return ;//这里加上你需要的内容,以下同理
		SetPos(2,5);color(14);cout<<">";color(7);//这里是效果1,效果二只需要在这里加上color(14)
	}SetPos(3,5); cout<<"开始游戏";//如果为效果2,这里在输出后加上color(7)以便回复
	if (i==2) {
		if (KEY_DOWN('Z')) in_con();
		SetPos(2,6);color(14);cout<<">";color(7);
	}SetPos(3,6); cout<<"查看介绍";
	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--;//这里不需要变动,如果操作键(w向上)不同可以改
	if (KEY_DOWN('S')&&i+1<=3) i++;//根据条数多少进行修改
	Sleep(100);
}

 

王梓澳在2021-08-04 13:20:19追加了内容

板块问题马上作者会在代码分享板块从新发,请各位不要着急


0
已采纳
吕梓瑜
吕梓瑜
初级天翼
初级天翼

emm......,我咋没看懂?

0
朱优扬
朱优扬
中级天翼
中级天翼

你不懂的我懂了,真好用,见到宝了,不过我的游戏暂时是用不到

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

正常人看到这个贴的想法:太好了,谢谢作者大大

水王看到这个贴的想法:针不戳,发10个贴有50经验,我要学习学习[doge]

0
0
褚俊皓
褚俊皓
新手天翼
新手天翼

大脑:我会了,手:你在放屁!

0
褚俊皓
褚俊皓
新手天翼
新手天翼

大脑:我会了,手:你在放屁!

0
0
王子桐
王子桐
高级光能
高级光能

本菜鸡是这样写延迟的:

​
      string s="我是你爸爸";
    for(int i=0;i<s.size();i++){
        cout<<s[i];
        Sleep(10);
    }

​

 

0
0
李玥仑
李玥仑
中级光能
中级光能

大脑:我学废了

手:听他妈的瞎扯

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

建议:板块改为代码分享或者编程竞赛,在刷题求解里面发是违反版规的(建议代码分享,可以复制)

0
0
0
胡书柏
胡书柏
中级守护
中级守护

不错不错,代入感很强,但我不用886

诶~~~~~就是玩啊!!!!!!

0
我要回答