2
已解决
王梓澳
中级光能
中级光能
很多同学想要写一个属于自己的游戏
那么作者的酷町豆比较充裕,就花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
0
0
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
0