C语言小白用easyX实现的一个简单的打字游戏
不要在意名字,这是学习中调侃一下室友,劳役结合。
如果没有图片,由于字体和背景颜色设置的问题,难度一和难度二估计看不到什么。
难度三正常。图片可以根据代码自己弄一下,或者问我要也行。
easyX实现的一个简单的打字游戏
学习easyx时随便写的一个小项目,单词模式可接受退格,分享出来和大家一起研究学习。
图片就几张背景图和一张掩码图,可以自己找。
图片展示
程序整体设计思想
游戏开始后,鼠标选择对应难度,单机开始游戏,字母模式时,输入对应字母,字母直接消除,单词模式时,可以接受退格,按回车确定输入,输入的单词正确时单词消除。 要有加速减速及速度复位,显示分数和正确率等功能。
程序整体设计流程图
重点子程序分析
- 随机产生字母和字符串
利用时间做种子,对26进行求余,再加上65 ,就是字母的ASCLL码
字符串就是自己创一个字符串数组,然后用rand对其总数求余,利用下标对应字母。
2.字符的下落
利用easyx的输出机制,改变字符的Y坐标,使其慢慢增加,视觉上达到字符降落的效果
编译遇到的两个报错:
- 没有与参数列表匹配的重在函数实例的错误,错误代码E0304
错误原因
是因为字符串的实际存储有多种编码格式,如果默认的编码格式和实际执行的平台不相符就会发生错误。
解决方案
以VS2019为例,只需右键项目>属性>配置属性>高级,把高级属性中的字符集改为使用多字节字符集
- - 编译出现 类似 const char 类型的实参void NoiseSuppressionX32(char,cha,int,int)无法将参数1从const
char[22]转换为char的问题
在项目属性->C/C+±>语言中的符合模式项选择否即可,就是这样的编译环境问题
源代码及注释如下:
头文件:
#include<graphics.h>
#include<mmsystem.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#pragma comment(lib,"winmm.lib")
#define MAXSTAR 1000 //星星个数
//窗口宽高
const int WIDTH = 750;
const int HEIGHT = 600;
struct STAR
{
double x;
int y;
double step;
int color;
};
STAR star[MAXSTAR];
//正确率和错误率
int right = 0;
int error = 0;
//下坠字符串的结构体
struct TARGET
{
int x;
int y; //坐标
char* str; //保存字符串
};
//保存用户输入的字符串的结构体
struct USERKEY
{
int x;
int y; //坐标
char str[20]; //保存字符串
}userkey = { 320,HEIGHT - 30,"" };
//下坠字母的结构体
typedef struct node
{
int x;
int y;
int s;
}letter;
void outtextxy_int(int x, int y, char* format, int num);
void outtextxy_double(int x, int y, char* format, double num);
void divWindow();
void drawScore();
void MYmusic();//音乐
void welcome();// 欢迎界面
void bkpicture();//背景图
void bkpicture2();
void bkpicture3();
void goodbye();// 退出界面
void ifget();// 实现闪烁的“按任意键继续” 可以 用作暂停
void divWindow2();//game2 窗口
void InitGame2Target(letter FangAn[], int n);//game2 初始化字符
void illustrate();
void mygame1();
void mygame2();
void mygame3();
main.cpp
#include"head.h"
void InitStar(int i)// 移动星星
{
star[i].x = 0;
star[i].y = rand() % 810;
star[i].step = (ran