目录
前言
大家好,我是二三四工作室的CEO兼总策划兼动画师兼……(此处省略99个职位),的——小班!
就在最近,我们的四人工作室也是心血来潮准备做一款游戏,当然只是最基础了文字游戏,就如同标题所说,游戏的名字就是——道魔不合!
接下来就给给位看官看看代码:
1.逐字输出的函数:
代码如下:
void gege(string a,int b){
for(int i=0;i<a.size();i++){
cout<<a[i];Sleep(b);
}
}
这一串的代码就十分的好理解了,就是引入一个字符串,然后一个个的输出和换行就行了!q(≧▽≦q)
2.Windows 控制台中设置光标位置的函数
代码如下:
void setcursor(int xxxxx, int yyyyy)
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
COORD setps;
setps.X = xxxxx; setps.Y = yyyyy;
SetConsoleCursorPosition(hCon, setps);
}
-
库引用:
#include <windows.h>
:这个头文件包含了 Windows API 的定义,允许使用诸如GetStdHandle
和SetConsoleCursorPosition
这样的函数。
-
获取标准输出句柄:
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
:这行代码获取当前进程的标准输出设备的句柄(通常是控制台)。
-
设置坐标:
COORD setps;
:COORD
是 Windows API 中定义的一个结构,包含两个整型成员X
和Y
,用于表示控制台中的坐标。setps.X = xxxxx;
和setps.Y = yyyyy;
:将传入的参数赋值给COORD
结构体的成员。
-
设置光标位置:
SetConsoleCursorPosition(hCon, setps);
:调用 Windows API 函数设置控制台光标的位置。
3.头文件需要:
#include<stdio.h>
#include <conio.h>
#include<windows.h>
#include <bits/stdc++.h>
4.主要内容:
代码如下:
void aa(){
setcursor(0,0);
int eat=0,a[10][10]={
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,3,4,3,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,5,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,20,0,0,1,
1,1,1,1,1,1,1,1,1,1};
char s;
while(1){
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(a[i][j]==1)printf("[]");
if(a[i][j]==5)printf("你");
if(a[i][j]==0||a[i][j]<-4)printf(" ");
if(a[i][j]==20){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0xB0);
printf("!!");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x0F);
}
if(a[i][j]==3)printf("||");
if(a[i][j]==m2){
if(m1==2){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x0A);
printf("门");
a[i][j]=9;
m2=9;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x0F);}
else printf("墓");
}
}
printf(" \n");
}
cout<<"HP:"<<HP<<" LV:"<<LV<<" LB:"<<LB_line<<" \n";
if(jg1>0){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0xF0);
cout<<"[ j ]";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x0F);
}else printf("\r ");
s=getch();
if(s=='j'){
if(jg1==1){ //和鬼对话
if(m1==0){
cout<<"\n\n鬼: 窝好饿";
a[1][1]=-5;
a[8][1]=-6;
a[1][6]=-7;
m1=1;
}
if(m1==1){
cout<<"\n\n鬼: 你有吃的吗? 1.有[提交]\n 2.没有";s=getch();
if(s=='1'){
if(eat==3){cout<<"\n\n鬼: 谢谢尼";m1=2;s=getch();}
else{cout<<"\n(你没有足够的)";s=getch();}
}
}
}system("cls");
if(jg1==2){system("cls");Sleep(1000);break;}//换场景
}
//移动
if(s=='a'){if(a[y][x-1]<1){a[y][x]=0;x--;}x2=x-1;y2=y;}
if(s=='d'){if(a[y][x+1]<1){a[y][x]=0;x++;}x2=x+1;y2=y;}
if(s=='s'){if(a[y+1][x]<1){a[y][x]=0;y++;}x2=x;y2=y+1;}
if(s=='w'){if(a[y-1][x]<1){a[y][x]=0;y--;}x2=x;y2=y-1;}
if(a[y2][x2]>0){
if(a[y2][x2]==9)jg1=2;
if(a[y2][x2]==20)jg1=1;
}else jg1=0;
if(a[y][x]==-5){
cout<<"\n\n你找到了一个碗";Sleep(1000);
a[y][x]=0;eat++;system("cls");
}
if(a[y][x]==-6){
cout<<"\n\n你找到了三柱香";Sleep(1000);
a[y][x]=0;eat++;system("cls");
}
if(a[y][x]==-7){
cout<<"\n\n你找到了一团米";Sleep(1000);
a[y][x]=0;eat++;system("cls");
}
a[y][x]=5;
setcursor(0,0);
}
}
数字代表:
1:
代表墙壁(不可通过)
0:
代表可通行区域
5
:代表玩家当前位置
20
:代表某个特殊位置(如鬼的位置)
主要功能
1.显示地图:采用二维数组 a[10][10]
表示游戏中的地图,数组中的不同值对应不同的元素,例如墙壁、角色(你)、物品等。
2.控制角色移动:通过键盘输入控制角色的移动(上下左右)。
3.与NPC互动:在特定位置(例如与鬼对话)进行对话和事件触发。
4.收集物品:角色可以找到并收集物品(如碗、香、米)。
注意事项
1.函数调用:setcursor
、SetConsoleTextAttribute
、Sleep
等函数需要包含适当的头文件(如 <windows.h>
)以便正常运行。
2.颜色设置:通过 SetConsoleTextAttribute
改变控制台文字的颜色,使得游戏界面更具可读性。
展示
5.总结
这一串的代码是我们二三四工作室技术部花了很久才做出了的,所以请大家多多包涵,有做的不好的地方可以评论,最后大家可以期待一下第二期的文章。
好了最后的最后,如果有想要加入二三四工作室的学生党可以加我的V:xiaoban182。
好了各位再见!ヾ( ̄▽ ̄)Bye~Bye~