C语言学习推荐---小游戏

article/2025/8/24 9:53:24

文章目录

  • 控制台文字游戏
    • srand、rand、time
    • 猜拳游戏
  • 控制台动作游戏
    • 运动的小球
    • 贪吃蛇
  • 音乐
  • 图形界面
    • easyx介绍
  • 后续

学习c语言的时候,想写例子,但是课后习题又太枯燥怎么办?
写小游戏可以锻炼我们的编程抽象能力和思维,而且比较有趣,最重要的是还能自己玩玩。

控制台文字游戏

c语言学了一点基础就可以写了,因为基本上只用到了输入输出和逻辑判断。

文字游戏可以做很长的剧情,我们用来学习就做个简单的,并且熟悉一下游戏中非常重要的一部分:随机

srand、rand、time

srand函数原型(<stdlib.h>):void srand( unsigned int seed );
功能:设置伪随机数生成器的起始种子值
参数:

  • seed — 伪随机数生成的种子

srand函数原型(<stdlib.h>):int rand( void );
功能:得到一个伪随机数
返回值:返回一个伪随机数范围为0~RAND_MAX(32767)

注:

  1. 第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand(),自动调用传参值为1。
  2. 使用相同种子(srand函数传参值相同),调用 rand()生成的是相同随机数序列。

看完上面的函数我们发现使用上有困难:srand函数传参固定会导致生成的随机数是相同随机数序列。那就不传固定的数,无时无刻不在改变当然可以是时间戳

time函数原型(<time.h>):time_t time( time_t *destTime );
功能:获取系统时间
功能:

  • destTime:指向时间的存储位置的指针。可以为NULL,在这种情况下,不存储返回值。

返回值:返回自1970年1月1日午夜以来经过的秒数,如果发生错误,则返回-1。


组合使用:
比如我们想要获取1~10的随机数,rand()为[0, 32767],rand() % 10为[0, 9],1 + rand() % 10为[1, 10].

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main(void)
{srand((unsigned int)time(NULL));for (int i = 0; i < 10; ++i) {printf("%d ", 1 + rand() % 10);}system("pause");return 0;
}

当然也可以自己试着实现一下,效果也还行:

#include <stdio.h>
#include <time.h>/* 种子 */
unsigned long int next = 1;/*** 设置随机数种子** @param seed 随机数种子*/
void srand(unsigned int seed)
{next = seed;
}/* 获取随机数 */
int rand(void)
{next = next * 1103515245 + 12345;return (unsigned int)(next / 65536) % 32768;
}int main(void)
{srand((unsigned int)time(NULL));for (int i = 0; i < 10; i++) {printf("%d ", 1 + rand() % 10);}system("pause");return 0;
}

猜拳游戏

我们有了伪随机函数就能模拟电脑猜拳了,可以生成0~2的随机数(可以当做索引),0代表剪刀,1代表石头,2代表布。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>// 结果
const char* result[3][3] =
{{"平手", "赢了", "输了"},{"输了", "平手", "赢了"},{"赢了", "输了", "平手"}
};// 石头 剪刀 布
const char* menu[3] = { "剪刀", "石头", "布" };int main(void)
{int player = 0; 	// 玩家int computer = 0;	// 电脑srand((unsigned)time(NULL));while (1){// 提示printf("这是一个猜拳的小游戏,请输入下列选项:\n0:剪刀\n1:石头\n2:布\n");// 获取输入scanf("%d", &player);scanf("%*[^\n]%*c");if (player < 0 || player > 2){printf("你的选择有错\n");}else{computer = rand() % 3;printf("电脑出了%s\t你出了%s\n", menu[computer], menu[player]);printf("%s\n", result[computer][player]);}system("pause");system("cls");}return 0;
}

system可以用来执行系统命令,pause为按任意键继续,cls为清屏。

控制台动作游戏

一开始可能对这种动起来的游戏没什么思路,我们可以类比一下动画播放,画面一直在改变我们就觉得它在动了。

运动的小球

我们先做一个没有交互的小例子体验一下。
我们把控制台想象成一个坐标系:
在这里插入图片描述
小球就有一个具体的坐标,我们只要不断改变小球的坐标并且重新绘制小球就能让它动起来。
绘制的思路(先来个无脑的):

  1. 先清屏
  2. 然后按照y坐标多少输出换行
  3. 按照x坐标输出空格
  4. 最后输出小球(就是一个特殊字符)

我们还需要一个新的函数Sleep用来延时,因为计算机处理的很快,所以不延时就移动的太快了。(其实这个涉及到了一个概念–帧率

Sleep函数原型(<windows.h>):void Sleep(DWORD dwMilliseconds);
功能:将进程挂起一段时间
参数:

  • dwMilliseconds — 停止时间,单位为毫秒
#include <stdio.h>
#include <windows.h>void MyPrint(int x, int y)
{system("cls");for (int i = 0; i < y; ++i){printf("\n");}for (int i = 0; i < x; ++i){printf(" ");}printf("●");
}int main(void)
{int x = 4,		// 小球的x坐标 y = 5,		// 小球的y坐标speedX = 2,	// 小球x轴方向的速度speedY = 1;	// 小球y轴方向的速度while (1){// 小球移动 x += speedX;if (40 == x || 0 == x){speedX = -speedX;}y += speedY;if (19 == y || 0 == y){speedY = -speedY;}// 打印小球 MyPrint(x, y);Sleep(100);}
}

贪吃蛇

以前学习时候看的视频:C语言贪吃蛇(原来哔哩哔哩上有免费的,现在好像没了)
这视频看完还不会建议多看两遍,代码多写两遍。
视频学完之后就有个问题,虽然蛇闪烁减少了,但是时不时还在闪,贪吃蛇解决闪烁的方法。

音乐

游戏肯定是要背景音乐的,windows自带的:c/c++播放音乐(PlaySound、mciSendString、mciSendCommand)。

图形界面

easyx介绍

安装教程和基本介绍官网都有。

官网上的教学信息很多,推荐几个看一下:
精确延时的实现
通过直接操作显示缓冲区实现高速绘图和特殊效果(如逐渐变亮)
同时检测多个按键和平滑按键处理
学习保存应用程序的配置信息
正确处理鼠标和按键消息(解决反应迟钝或消息丢失的问题)
一步步拓展程序,实现文字在背景上的移动
为什么屏幕分辨率是 640x480?
详解透明贴图和三元光栅操作
对慢羊羊的半透明贴图函数进行改良
在程序中正确使用 Unicode 和 MBCS 字符集

游戏也推荐几个,这些都是比较简单的,不是说没推荐的就不好,
涂格子游戏(也叫点灯游戏)(by 豆腐果)
贪吃蛇游戏的双人对战版
推箱子游戏(by 自然向日葵)
别踩白块儿(双人版) VC 源代码
超级蘑菇2(模拟 FC 游戏:超级玛丽)(by 木子念念)

后续

如果你上面的内容搞完了,说明c语言肯定入门了,这边也不再说后续干嘛了,找个学习路线继续学吧。


http://chatgpt.dhexx.cn/article/xy3O4oPZ.shtml

相关文章

c语言入门级小游戏·飞机(1.0版)| 激发你的编程兴趣(50~100行代码)

目录 制作一个可移动的飞机 发射激光 设置一个可击中的障碍物 完整代码 声明&#xff1a;本游戏参考《c语言课程设计与游戏开发实践教程》。 先来放一个效果图 怎么样&#xff0c;真的是新手级别吧&#xff1f; &#xff08;效果视频c语言练习草稿_game1.2.5飞机-CSDN直播…

C语言小游戏之扫雷完整版

C语言小游戏之扫雷 一.游戏介绍二.游戏步骤及实现的功能1.初始化雷盘2.打印雷盘3.随机布置雷4.玩家排雷5.防止玩家第一次被炸死6.统计所选位置周围八个位置中雷的个数7.递归拓展已选位置周围的区域8.标记雷及取消标记 一.游戏介绍 看到这张图片&#xff0c;相信很多小伙伴都非常…

C初阶必写的C语言小游戏—扫雷,一看就会,看完就能写

目录 一.前言二.资源环境的配置三.游戏整体构思1.游戏的开始与结束(菜单)2.创建二维数组用来布置雷和排查雷的信息3.初始化棋盘4.打印棋盘5.布置雷6.排查雷 四.所有代码及效果展示 一.前言 人尽皆知的扫雷小游戏&#xff0c;原理简单&#xff0c;写法也简单&#xff0c;我会通…

c语言代码怎样制作成一个游戏?

游戏背景 《球球大作战》是Superpop一款自主研du发的免费手机网络游戏。 以玩家间的实时互动PK产生游戏乐趣为设计宗旨&#xff0c;通过简单的规则将玩家操作直接转化为游戏策略&#xff0c;体验智谋碰撞的战斗乐趣。 游戏的基本操作包括键盘按下&#xff08;上下左右四个方向…

[ C语言 ] 用C语言实现小游戏 ---- 三子棋 代码 + 解析

前言 本篇文章记录了用C语言实现三子棋小游戏&#xff0c;主要目的是对之前C语言知识学习的巩固&#xff0c;联系各个知识&#xff0c;以及怎么样实际使用各个知识。 一、三子棋的游戏规则 玩家将会看到一个3X3的网格棋盘&#xff0c;默认玩家先下棋&#xff0c;电脑后下棋。 …

一个好玩的小游戏(纯C语言编写)

最近在看知乎是发现了一个这一个专栏 https://zhuanlan.zhihu.com/c2game 从中获取的许多知识&#xff0c;本文中的游戏也是从里面学到的&#xff0c;不过本人又自己加了一些功能。 这是一个类似于飞机大战的游戏&#xff0c;不过目前代码量比较小&#xff0c;所以看起来非常…

【用游戏学C语言】几个基本的小游戏的实现(缓慢更新中~)

目录 ​更新说明 前言 1.相关函数的简单介绍&#xff08;预备知识&#xff09; &#xff08;1&#xff09;关于函数getch() &#xff08;2&#xff09;关于函数system() &#xff08;3&#xff09;关于函数sleep() &#xff08;4&#xff09;关于函数kbhit() &#xff…

【C语言】游戏项目:《疯狂赛车》,每个人都要加油活下去

序 交换一个苹果&#xff0c;得到一个苹果&#xff1b;交换一种思想&#xff0c;得到一种思想。选择与你才干&#xff0c;性格不同的人&#xff0c;他可以弥补你的缺陷。 嗨&#xff01;这里是狐狸~~ 最近有点网抑云了&#xff0c;脑子很乱&#xff0c;不晓得想些什么&#…

Qt学习之QFile和QFileInfo

Qt项目中对文件操作是必不可少的。顾名思义&#xff1a;QFile是文件对象类&#xff0c;QFileInfo是文件信息对象类&#xff0c;结合例子我们看一下用法。 读的文件内容如下&#xff0c;以字符 “#” 或者 “;” 开始的为注释行。 [Extern_Item1] ;名称 Namelibccgext_cvi_64.so…

QT5 QFile读/写文件操作方法

文档打开读/写操作命令说明 值描述QIODevice::NotOpen未打开QIODevice::ReadOnly以只读方式打开QIODevice::WriteOnly以只写方式打开QIODevice::ReadWrite以读写方式打开QIODevice::Append以追加的方式打开&#xff0c;新增加的内容将被追加到文件末尾QIODevice::Truncate以重…

qt5之QFile读写文件

1、效果 读写文件用到的是QFile类&#xff0c; 这里&#xff0c;我显示文件内容用到的是 QTextEdit 2、创建打开和关闭按钮 // 打开文件btnOpenFile new QToolButton;btnOpenFile->setText(tr("open a file"));btnOpenFile->setToolTip(tr("open …

Qt 创建文件 用QFile和QDir类

项目需求是 根据日期创建多级子文件夹, 根目录保存 log.txt 控制台程序实现 如下执行结果 createFile 为程序目录 文档结构: 源码: #include <QtCore/QCoreApplication> #include <QDir> #include <QFile> #include <QDebug> #include <QDateTim…

QFile(文件)

QFile QFile提供一个用于读/写的接口&#xff0c;是一个可以用来读/写二进制文件的Qt资源的I/O设备&#xff0c;QFile可以单独使用&#xff0c;一般配合QTextStream或QDataStream 输入文件路径时最好使用"/"作为分隔符 构造函数&#xff1a; 常用的函数&#xff1a;…

QFileDialog

一、描述 QFileDialog 类使用户能够遍历文件系统以选择一个或多个文件或目录。 创建 QFileDialog 最简单的方法是使用静态函数&#xff1a; fileName QFileDialog::getOpenFileName(this, tr("Open Image"), "/home/jana", tr("Image Files (*.p…

Qt -- QFile文件读写操作

对于文件的读写操作&#xff0c;C 和 C 都各有一套方式。而在 Qt 中也有一套&#xff0c;即使用 QFile 对文件进行读和写操作。 文件的打开方式 文件路径说明&#xff1a;&#xff08;windows-release编译&#xff09; QFile *file new QFile("EcgCap.dat");表示这…

[QT_032]Qt学习之基本文件读写QFile

本文转自&#xff1a;《Qt编程指南》 作者&#xff1a;奇先生 Qt编程指南&#xff0c;Qt新手教程&#xff0c;Qt Programming Guide 7.2 基本文件读写QFile Qt 常见的文件读写类有三个 QFile、QTextStream 和 QDataStream&#xff0c;本节先概要介绍这三个文件读写类&…

QFileInfo

一、描述 QFileInfo 提供有关文件系统中文件的名称和位置&#xff08;路径&#xff09;、访问权限、文件类型等信息。 FileInfo 还可用于获取有关 Qt 资源的信息。这个类是隐式共享的。 二、成员函数 2.1、判断函数 1、bool isAbsolute() 文件路径是否绝对路径。 注意&am…

QFile详解(文件如果不存在则创建、判断文件是否存在、获得文件的各种详细信息、读写文件)

目录 一、QFile文件如果不存在则创建的方法 二、QFile判断文件是否存在的方法 三、QFileInfo的方法获得文件的各种详细信息 四、QFile读写文件的内容 一、QFile文件如果不存在则创建的方法 QFile f("./1234.ini");if(!f.open(QIODevice::Append)){return 0;} op…

QFile文件读写

文章目录 简介常用apiQFile类读写文件QFileQTextStream读写文件 简介 QFile类提供了一个读取和写入文件的接口&#xff0c;一个读写文本、二进制文件和资源的I/O设备。 QFile读写文件的两种方式&#xff1a; 1.QFile可以单独使用。 2.QFile与QTextStream或QDataStream一起使用…

Qt之Qfile读取文件操作

文件系统&#xff1a;   文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象&#xff0c;这些设备具有读写字节块的能力。下面是 I/O 设备的类图&#xff08;Qt5&#xff09;&#x…