本文难度:★☆☆☆☆

题图:控制台RPG游戏——诛仙剑 by 呆呆的码农

一、前言

在我大知乎,有以下基本日常问题:如何学习C语言?

如何学习C++?

如何学习Python?

如何学习XXXX语言?

用一句话形容这类问题——高默新泪。高手因为不想反复回答这类问题而沉默……新手因为苦苦找不到入门的路而流泪。

本文想要给苦恼的新手们指明一个前进的方向。

二、控制台游戏简介

所谓控制台,在Windows下就是开始——运行——cmd。也叫“命令行窗口”、“Console”、“Terminal”都是同一个东西。

这个黑漆漆的东西有什么好玩的呢?看看下面这个游戏:(这游戏还可以,我就只打穿了两遍而已。)

和Flash原版魔塔基本一样:

在控制台里,我们可以通过彩色的文字、背景、空格,来表现出比较抽象的场景。掌握了这个方法,我们就可以尽情发挥想象,做出各种各样的游戏了。而且麻雀虽小五脏俱全,制作控制台游戏有助于我们对游戏整个流程有完整的掌控,自己设计逻辑、渲染循环,让我们对真正引擎的理解能更上一层楼。

虽然画面过于简单是个缺点,但是胜在制作也很简单,最重要的是,在学习阶段让我们能迅速开发自己的小游戏~~

三、控制台游戏鉴赏

其实知乎上有一些非常厉害的控制台游戏的例子,但是那些作品主要是用到了一些字符渲染技术,将复杂图形转化为字符表示……其实复杂的东西都有一个简单的内核,如果咱们把基本的控制台操作搞定了,就离大佬们近了一大步。毕竟游戏是用来玩的,不是用来膜拜的。

所以这里我们展示一些皮皮关学员作品,供大家学习参考。

1、魔塔

(有点闪烁是因为录屏软件正好录到了屏幕刷新的时刻,游戏本身闪烁并不明显)

本游戏采用了把关卡地图放在txt文本里的方法,而且后期有跳关、查看怪物等功能,麻雀虽小,五脏俱全。最难能可贵的是工程代码比较平铺直叙,萌新也可以看懂。

2、回合制战斗模拟器

这个作品在技能动画上的处理非常厉害,箭头移动比较流畅(动图看不出来。这是用一边擦除、一边画箭头的方法实现的)

3、雾之迷宫

开脑洞,实现带有迷雾的地图。

4、战棋游戏Demo(火焰纹章)

这个Demo不完整,只是展示了《火焰纹章》游戏中的移动、攻击等细节。彩色背景的效果棒极了,文字一个一个冒出来的感觉也很帅。

5、扫雷、俄罗斯方块、2048、贪食蛇等等

一些经典的小游戏都可以在控制台上实现,我就不再贴图了,有兴趣可以在文末的地址中下载。

四、用各种语言编写控制台游戏

不同的语言开发控制台游戏的方法略有不同,主要原因是某些语言缺乏好用的控制台输出库。我们最需要的是控制字符输出、窗口刷新的函数。

1、C#

在windows下,C#语言是最好用的控制台游戏开发语言,微软爸爸给我们提供了丰富的显示相关函数,下面举个例子,彩色动态的Hello world:

高级用法:可以用Console.SetCursorPosition(int left, int top)来把光标定位在某个位置,这样就可以做到只修改某个位置的字符,而不用反复调用Console.Clear() 让屏幕整体闪烁。前面的“回合制战斗模拟器”就用这种技术实现了极其流畅的动画效果。

2、C++ / C

C++操作控制台方案很多,比如利用system("color 03"); 但是用起来有一些问题。

如图:直接只用DOS命令color即可改变文字和背景颜色。

相对好一些的方案是使用Windows提供的SetConsoleTextAttribute等函数来实现设置颜色。但是Windows提供的清屏我没有找到靠谱的方法,只能暂时用system("cls")来做,效果还可以,以下代码提供了清屏和打印彩色字符两个函数供参考:

#include "stdafx.h"

#include

#include

#include

#include

using namespace std;

void PrintfColor(char* str, WORD color, ...) {

WORD colorOld;

HANDLE handle = ::GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_SCREEN_BUFFER_INFO csbi;

GetConsoleScreenBufferInfo(handle, &csbi);

colorOld = csbi.wAttributes;

SetConsoleTextAttribute(handle, color);

cout << str;

SetConsoleTextAttribute(handle, colorOld);

}

void Clear() {

system("cls");

}

int main() {

while (true)

{

PrintfColor("H", 10);

PrintfColor("e", 9);

PrintfColor("l", 12);

PrintfColor("l", 11);

PrintfColor("o", 13);

PrintfColor("!", 4);

}

system("PAUSE");

return 0;

}

由于C和C++在不同平台、不同系统下套路不太一样。网上有些方法无法直接应用,主要是因为VisualStudio版本以及WinSDK版本不同造成的。建议试验确定一种方案,然后以该方案为准即可。

3、Python

在控制台操作方面,Python有功能强大的curses模块,但是必须要用linux系统,可以考虑用Linux虚拟机来学习。

(Python的Windows版本缺少一些好用的库……非常遗憾,刚才我又搜了一下,还是没找到适合Windows下开发控制台游戏的方案。希望朋友们在评论里补充。(或者咱们直接用Pygame来做小游戏更简单 :D))

五、游戏主循环

其实,有了打印字符和清空屏幕这两个工具,就已经可以制作各种各样的控制台游戏了,简单说下思路:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

// C#控制台游戏架构namespace ConsoleApp1

{

class Program

{

static void Init() {

// 初始化游戏 }

static void Logic() {

ConsoleKeyInfo key = Console.ReadKey();

// 针对输入进行处理 }

static void RealTimeLogic()

{

// 另一种输入不卡住游戏的方案,适用于贪食蛇、俄罗斯方块等游戏 ConsoleKeyInfo key;

// 如果没有按键输入,就不会执行ReadKey,游戏就不会卡住 if (Console.KeyAvailable)

{

key = Console.ReadKey();

}

// 针对输入进行处理 }

private static void Refresh() {

// 清屏 Console.Clear();

// 将内容打印到屏幕上 }

static void Main(string[] args)

{

Init();

// 游戏主循环 while (true)

{

Logic();

Refresh();

}

}

}

}

所有文章中提到的游戏,我都开放了源码下载。而这些工程万变不离其宗,都用到了以上基本的游戏逻辑循环,只要看懂了一个项目,其它都迎刃而解了。建议从《魔塔》项目开始学习,比较符合新手的理解力。

建议从简单的回合制游戏、贪食蛇、2048开始尝试吧!

工程地址:

python控制台小游戏_学习编程的好方法——控制台游戏相关推荐

  1. 不同语言编程能整合到一起吗_学习编程入门指南

    每天都看到很多对编程感兴趣的人在问是不是可以自学软件开发,或者应该怎么自学编程才能入门.在这篇文章里,我将尝试重现一个初学者在学习计算机编程时可能会碰到的问题,并尽量提供相应的解决思路,希望对初学者有 ...

  2. JavaScript实现跳跃游戏的动态编程自上而下的方法算法(附完整源码)

    JavaScript实现跳跃游戏的动态编程自上而下的方法算法(附完整源码) dpTopDownJumpGame.js完整源代码 dpTopDownJumpGame.test.js完整源代码 dpTop ...

  3. JavaScript实现跳跃游戏的动态编程自下而上的方法的算法(附完整源码)

    JavaScript实现跳跃游戏的动态编程自下而上的方法的算法(附完整源码) dpBottomUpJumpGame.js完整源代码 dpBottomUpJumpGame.test.js完整源代码 dp ...

  4. python学什么教学_学习python的几个小技巧

    提示1:每天编码 学习新语言时,一致性非常重要.我们建议每天做出代码承诺.可能难以置信,但是肌肉记忆在编程中起着很大的作用.每天致力于编码将真正帮助发展肌肉记忆.尽管乍一看似乎令人生畏,但考虑每天从2 ...

  5. 编程入门python java和c语言_学习编程适不适合从Python入门?哪种语言更适合入门?...

    本文对比了C语言和Python语言,分析它们作为编程入门语言各自的利弊,并给出了我推荐的编程学习道路. 我本身已经入门了Python脚本语言,在进阶C语言和JAVA语言后,Python重学就轻松很多, ...

  6. python 儿童 游戏_儿童编程教学 – 推荐几款Python编程类游戏

    自学过编程的小伙伴都知道,在学习的过程中,不仅仅要记下很多的知识点,而且那些知识点,都是非常的干,很干,很干,没有一点乐趣的感觉-.. 所以在很多人学习 在玩游戏的过程中就能学习到编程的网站! 支持多 ...

  7. python编程要懂英语吗_学习编程必须要会英语吗?

    原标题:学习编程必须要会英语吗? 很多刚开始想学编程的人都问这问那,比如"我英文差能学编程吗?"."我数学差能学编程吗?". 之前给大家分析了数学与编程之间的关 ...

  8. 学JAVA编程用什么电脑配置_学习编程,你真正需要的是什么样配置的电脑?

    写这篇文章,仅针对经济条件一般且想认真学习编程的同学,家里经济条件优越,且想玩大型游戏的同学请绕过. 当然,这里也不是说不能玩游戏,只是说如果想认真学习编程,游戏请尽量不玩. 学习编程,你真正需要的是 ...

  9. 语言翻译成汇编语言_学习编程有没有必要从C语言和C++学起?应该怎么学?

    硬件层级:这里也就是实体硬件,包括:CPU.内存.显卡等等...这些都不属于软件的范畴内. 汇编层级:在之前没有C/C++以及java之前,是汇编的年代.那么汇编语言对于我们来说,可读性是很查的,不适 ...

最新文章

  1. php访问参数错误,phpcms参数错误怎么办
  2. jQuery |淡入淡出
  3. Java构建子类对象时的顺序
  4. python gevent asyncio_python用from gevent import monkey; monkey.patch_all()之后报ssl等错误
  5. SQL Server 连接字符串
  6. html js轮播图无白链接,JavaScript:100%原生js实现左右切换的轮播图(无延迟加载)...
  7. 微信公众帐号开发教程第9篇-QQ表情的发送与接收
  8. 华为 “VRRP” 多备份组
  9. 不要着急改代码,先想想--centos 6.8下编译安装tmux
  10. [ecshop调试]ecshop 数据库查询缓存详解 有三种缓存,query_cache(数据库查询缓存)、static_cache(静态缓存)和cache(普通的缓存)
  11. r5 5500u和r5 4600u区别有多大 r55500u和r54600u哪个好
  12. 用机器学习颠覆环法自行车赛传统体验 岱凯野心可不只有这一点!
  13. 科大讯飞踩过的“坑”,还有多少AI企业要踩?
  14. 全球与中国汽车空气悬架系统市场现状及未来发展趋势
  15. Open-Falcon学习之路(1)
  16. 使用 SQL Server 创建唯一索引
  17. 分布式数据访问层(DAL)
  18. ggplot2 | 世界杯赛程的可视化就交给我吧!~
  19. Windows——系统盘重置密码
  20. 用Python一键生成微信个人专属数据报告,了解你的微信社交历史

热门文章

  1. Eureka 整合 Ribbon 巨坑解决方案
  2. vue+elementUI实现的日期选择组件
  3. html用jq设置动态效果,7款绚丽的jQuery/HTML5动画及源码
  4. OA平台——协同管理与办公自动化
  5. POST 常见的数据提交方式
  6. gateway配置https访问
  7. EIA 标准电阻速查表
  8. relativelayout设置边框_Android TableLayout 增加边框,以及圆角的实现方式
  9. g.e-hentai 绅士爬虫
  10. Word无格式粘贴 宏与周围格式相匹配粘贴 宏