从今天开始,我将会不定期更新这个系列,欢迎各位订阅(实际上也不过是记得看就行)

那么,首先我们要明确,我们要做什么,明确整体游戏的框架。

在这里,我想带做一款高自由度的2D游戏,类似《我的世界》和《泰拉瑞亚》一样的。

那么,我依然是从0开始,那么我首先就要创造一个控制台窗口:

这个代码推荐使用Dev-cpp中项目编写,方便后面添加头文件以及资源文件。

#include <windows.h>
int main()
{SetConsoleTitle("My Life");return 0;
}

喂喂喂!不要使用C语言编译器编译!后面会添加C++部分!

那么,现在,我就创建了一个题目为My Life的窗口,这就是我整个游戏的整体。

可是一个窗口,有滚动条太丑了吧!

《我的世界》可是没有滚动条的啊!

所以,这个滚动条我也不能留下来。

那怎么办呢?

只有把我们的system大神请出来啦!

我敲完的新代码为:

#include <windows.h>
#include <cstdlib>
using namespace std;
int main()
{system("mode con cols=70 lines=20");SetConsoleTitle("My Life");return 0;
}

这样,我就得到了一个长70,宽20的控制台窗口。

如图所示:

可是,如果一个游戏的窗口就只有这么小,这哪能满足玩家的意愿呢?甚至都有可能看近视了

所以怎么办呢?我可以把长宽按照一定的比例进行放大:

写完以后,发现万恶的滚动条他又!出!现!了!

因为将窗口长宽都放大2倍不行,所以我只能放大1.5倍试一试了

搞完之后,发现滚动条更长了,所以我只能手动寻找一个合适的大小

最后发现110*35这个比例还挺养眼的

把代码贴出来:

#include <windows.h>
#include <cstdlib>
using namespace std;
int main()
{system("mode con cols=110 lines=35"); SetConsoleTitle("My Life");return 0;
}

接下来,我们就要确定各种元素各自的颜色了。

在写代码之前,我们先来看一下控制台支持哪些颜色:

从0到F,一共16种颜色

跟着这个,我们来确定一下:

天空 : 9 淡蓝色

水 : 1 蓝色

草地 : 10 淡浅绿色

树叶 : 11 淡绿色

树干 : 0  黑色

根据第一个天空,我们可以写出下面的函数:

void Sky()//淡蓝色
{SetColor(9,9);//第一个9 前景色 第二个9 背景色cout<<" ";
}

再写出其他的,得出源代码:

#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
void Sky()//淡蓝色
{SetColor(9,9);//第一个9 前景色 第二个9 背景色cout<<" ";
}
void water()
{SetColor(1,1);cout<<" ";
}
void grass()
{SetColor(11,10);cout<<" ";
}
void treeye()//树叶 英语没学好TAT
{SetColor(10,11);cout<<" ";}
void treegan()//同理,这是树干
{SetColor(0,0);cout<<" ";}
void PaintColor()
{for(int i=0;i<30;i++){for(int j=0;j<110;j++) Sky();}for(int i=30;i<35;i++){for(int j=0;j<110;j++) grass();}
}
int main()
{system("mode con cols=110 lines=35"); SetConsoleTitle("My Life");return 0;
}

哦,我们用到了cout,所以别忘了加上头文件iostream!

#include <iostream>

在做完了这些后,发现仍然没有任何输出。。。

别急!我们现在就来输出一个2D世界!

我们的程序是110列,35行,所以我们需要一个双层for循环来填充颜色!

效果图:

#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
void Sky()//淡蓝色
{SetColor(9,9);//第一个9 前景色 第二个9 背景色cout<<" ";
}
void water()
{SetColor(1,1);cout<<" ";
}
void grass()
{SetColor(11,10);cout<<" ";
}
void treeye()//树叶 英语没学好TAT
{SetColor(10,11);cout<<" ";}
void treegan()//同理,这是树干
{SetColor(0,0);cout<<" ";}
void PaintColor()
{for(int i=0;i<30;i++){for(int j=0;j<110;j++) Sky();}for(int i=30;i<35;i++){for(int j=0;j<110;j++) grass();}
}
int main()
{system("mode con cols=110 lines=35"); SetConsoleTitle("My Life");PaintColor();getch();return 0;
}

一个非常好康的配色~

好了,我们已经成功输出了天空和地面,接下来,我们来输出白云!

因为不可能白云的位置一成不变,所以我们需要用到随机数来确认白云的位置和长度

效果图

废话不多说,上代码~

#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
void gotoxy(int x, int y) {COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
int Random_Add()//随机位置
{srand((unsigned)time(NULL));int a;a=rand()%70;return a;}
void Sky()//淡蓝色
{SetColor(9,9);//第一个9 前景色 第二个9 背景色cout<<" ";
}
void water()
{SetColor(1,1);cout<<" ";
}
void grass()
{SetColor(11,10);cout<<" ";
}
void treeye()//树叶 英语没学好TAT
{SetColor(10,11);cout<<" ";}
void treegan()//同理,这是树干
{SetColor(0,0);cout<<" ";}
void PaintColor()
{for(int i=0;i<30;i++){for(int j=0;j<110;j++) Sky();}for(int i=30;i<35;i++){for(int j=0;j<110;j++) grass();}
}void Cloud()
{int n=Random_Add();gotoxy(n,3);for(int i=0;i<8;i++){SetColor(15,15);cout<<" ";}cout<<endl;
}
int main()
{system("mode con cols=110 lines=35"); SetConsoleTitle("My Life");PaintColor();Cloud();while(1) ;return 0;
}

(可能代码写的有些杂乱,可以自己修改一下格式)

同样,我们也可以利用写白云时的算法,在地面上生成一些湖泊:

效果图:

老样子 上代码:

#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
void gotoxy(int x, int y) {COORD pos;pos.X=x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void Sky()//淡蓝色
{SetColor(9,9);//第一个9 前景色 第二个9 背景色cout<<" ";
}
void water()
{SetColor(1,1);cout<<" ";
}
void grass()
{SetColor(11,10);cout<<" ";
}
void treeye()//树叶 英语没学好TAT
{SetColor(10,11);cout<<" ";}
void treegan()//同理,这是树干
{SetColor(0,0);cout<<" ";}
void PaintColor()
{for(int i=0;i<30;i++){for(int j=0;j<110;j++) Sky();}for(int i=30;i<35;i++){for(int j=0;j<110;j++) grass();}
}void Cloud(int line)
{srand((unsigned)time(NULL));int n=rand()%70;gotoxy(n,line);for(int i=0;i<8;i++){SetColor(15,15);cout<<" ";}cout<<endl;
}
void SummonLake()
{srand((unsigned)time(NULL));int n=rand()%70;gotoxy(n,29);for(int i=0;i<14;i++){for(int j=0;j<2;j++)water();}cout<<endl;
}
int main()
{system("mode con cols=110 lines=35");SetConsoleTitle("My Life");PaintColor();Cloud(3);SummonLake();while(1) ;return 0;
}

(大家可以试着多运行几次 每次都不一样哦)

可是,这么空旷,感觉欠缺了什么……

不错!这上面一棵树也没有,不好看啊!

可是因为篇幅原因(实际上想多搞点关注),这个我们就放到下期讲,再见!

从0开始制作小游戏(一)相关推荐

  1. 从0开始制作小游戏(二)

    上期我们说到我已经做好了游戏的基本界面,现在,我将在这空荡荡的世界里添加一棵树 效果图 (有的人还可以看到罕见的水上树呢!) 贴代码咯: #include <windows.h> #inc ...

  2. 你的第一个微信小游戏,教你从0开始制作小游戏(一)

    一.下载微信开发者工具和Cocos Creater 1.微信开发者工具 微信开放文档 2.Cocos Creater Cocos引擎_游戏开发引擎 发布流程就是先在cocos中编写你的游戏,然后生成对 ...

  3. python能制作游戏吗_如何用Python制作小游戏

    要想用Python制作小游戏,必须要安装一个插件Pygame 什么是Pygame Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需 ...

  4. 用JAVA制作小游戏——飞机大战(三)

    本篇博客是对飞机大战游戏项目完整代码的展示 详细代码讲解: 用JAVA制作小游戏--飞机大战(一) 用JAVA制作小游戏--飞机大战(二) 最下方附整个程序的文件下载链接 代码展示 主界面 impor ...

  5. 用JAVA制作小游戏——飞机大战(二)

    本篇博客是对飞机大战游戏使用代码的展示 重难点: 首先需要鼠标能够控制战机,使鼠标在窗口内时始终能够使战机的位置与鼠标相同,实现鼠标控制战斗机移动. 其次需要能够以一定的速度产生子弹和敌机,并且以一定 ...

  6. 用JAVA制作小游戏——推箱子(三)

    本篇博客主要是对推箱子地图编辑器功能的代码讲解. 首先给出这段代码的部分运行截图: 重难点: 地图编辑器主要有三个重难点: 需要有一个绘制地图的界面 能够实现地图绘制的功能 地图绘制完成后需要将地图内 ...

  7. 用JAVA制作小游戏——推箱子(二)

    本篇博客主要是推箱子游戏界面功能的代码讲解. 首先先给出这段代码的部分运行截图: 重难点: 游戏界面主要有五个重难点: 固定好地图的位置 地图的显示 构建菜单栏 读取地图数据 玩家操作功能实现 地图的 ...

  8. 用JAVA制作小游戏——推箱子(一)

    本篇博客是对推箱子游戏首页代码的展示 效果图: 难点: 在背景图上添加按钮. 由于直接使用add方法,会变成图片一块区域,按钮一块区域,彼此互不重叠,形成的界面效果不太好,因此用了JLayeredPa ...

  9. 用java制作小游戏:小恐龙跑酷

    用java制作小游戏:小恐龙跑酷 插入链接与图片 运行图片:( 第一次做游戏,画风比较丑哈!最左边的就是主角小恐龙了,中间的是障碍物仙人掌,右边的小狗也是障碍物,右上角的是分数条) 图片: 以下是Ja ...

最新文章

  1. 【比较面】真核生物和原核生物的异同
  2. Jetbrains全系列完美破解--------亲测可用
  3. 大数据时代下的迁移学习_继深度学习后,下一个热点技术是迁移学习
  4. 【转】Dynamics CRM 365零基础入门学习(三)Dynamics 通过Web API 来调用自定义的Action(使用插件)
  5. 机器学习算法--协同过滤算法
  6. python中idle怎么打开_为什么我的python脚本只打开IDLE?
  7. C#中ToString()格式详解
  8. 2018 10 23
  9. 转【28个Unix/Linux的命令行神器-----陈皓】
  10. C盘文件分析(如何减小C盘容量)
  11. js几种将网站设为首页和加入收藏的代码
  12. AGV调度系统开发1(电子地图编辑软件)
  13. 用纯JavaScript实现的微信二维码图片生成器
  14. 【独行秀才】macOS Monterey 12.0 Beta4(21A5294g)原版镜像
  15. R语言实战 第2版 中文目录
  16. 局域网搭建IOS应用在线安装环境
  17. Unity发布小游戏(五):小游戏的打包与上传到CCD云服务器
  18. vue中利用gif.js实现GIF动图下载
  19. VCD零售/出租管理系统
  20. 半导体激光器的工作原理

热门文章

  1. linux 无线传输,嵌入式Linux下图像存储与无线传输技术研究
  2. linux使用jq时提示error: split is not defined
  3. 基于新形态下变电站智慧消防管理体系构建研究
  4. 初始化块和构造函数的执行顺序
  5. djangox学习05--项目需求分析与系统设计
  6. 呼叫系统呼叫中心crm系统
  7. HTML5七夕情人节表白网页制作【新年倒计时-红色雪花】HTML+CSS+JavaScript
  8. 2022-2028全球与中国360度投影系统市场现状及未来发展趋势
  9. 3D游戏 和 3D电影
  10. 脚本之家c语言指针错误,wincc编译C语言脚本是出错!-工业支持中心-西门子中国...