基于EasyX制作的练手小游戏

#include <graphics.h>
#include<conio.h>
#include<stdio.h>
#include<time.h>//随机数函数的头文件
#define kuan 1000//宽
#define chang 600//长  在这里定义的是窗口的大小
#define g 0.2//重力加速度
float x = 100;
float y = 500;//小球的坐标
int fenshu = 0;//分数
int JX( int Y ,int L)//障碍物生成
{
	static int Jx1 = 600;//矩形的坐标
	static int Jx2 = 640;

	fillrectangle(Jx1, 0, Jx2,Y);
	fillrectangle(Jx1, Y+L, Jx2, kuan);//上下两个矩形
	Jx1 -= 2;
	Jx2 -= 2;//从右向左移动
	if (Jx2 <= 0)//当一轮移动完毕,返回12,并且再生成一轮障碍物
	{
		Jx1 = 600;
		Jx2 = 640;
		return 12;
	}
	if (((x + 20 > Jx1) && y + 20 < Y && (x - 20) < Jx2) || ((x + 20 > Jx1) && y + 20 > Y + L && (x - 20) < Jx2))
	{
		y = 500;//碰到了障碍物就归回原位
		fenshu = 0;//分数也得归零
	}	

}

int main()
{

	initgraph(chang, kuan);//首先生成窗口
	float Dy = 0;//位移差
	char aa = 0;
	int Y1 = 100;//缺口的顶
	int L= 300;//缺口的高度
	while (1)
	{
		settextstyle(35,0, _T("黑体"));
		TCHAR s[5];
		_stprintf_s(s, _T("%d"), fenshu);		// 高版本 VC 推荐使用 _stprintf_s 函数
		outtextxy(x-8, y-18, s);//这一段就是把字生成在球上

		Sleep(10);
		Dy += g;//位移量的计算
		y += Dy;//坐标的计算
		//这一段基于高中物理公式
		if (_kbhit())//当按键按下的时候才会进入,这样就不会被卡住
		{
			aa = _getch();
			if (aa == ' ')
				Dy -= 7;//位移量向上增加也就是-7
		}
		if ((y >= kuan - 20) || (y <= 20))//如果碰到底边或者顶部
		{
			y = 500;//也是死了
			Dy = 0;
			fenshu = 0;
		}
		cleardevice();//清屏
		fillcircle(x, y, 20);//定义一个小球	

		if (JX(Y1, L) == 12)//如果一关过了
		{
			L = 150 + rand() % 150;
			Y1 = rand() % (1000 - L);//那么就可以利用随机函数生成下一个关口
			fenshu+=1;
		}
	}
}

总是一味地上网课,看见C语言都恶心,于是干脆干些不务正业的事让自己开心开心。

本游戏基于EasyX制作,参考了B站上面的视频,当然也并没有全部参考,毕竟参考了就写不出这样正宗的 屎山代码

附上视频链接 http://【3.11 游戏的完善《C语言程序设计:一个小球的编程之旅》视频教程连载】https://www.bilibili.com/video/BV1JW4y1b7E8?vd_source=1034ead19d48e54bdb8391d00ca39ee1

程序写的确实不好,没有办法,确实是没有天赋,还是在缓慢的学习中。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是井字棋小游戏的C代码,基于EASYX图形库: ```c #include <graphics.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define ROW 3 // 定义行数 #define COL 3 // 定义列数 #define SIZE 100 // 定义格子大小 // 定义棋子类型 typedef enum {NONE, PLAYER1, PLAYER2} ChessType; // 定义棋盘 ChessType board[ROW][COL]; // 定义当前玩家 ChessType currentPlayer = PLAYER1; // 判断是否结束游戏 int isGameOver(); // 绘制棋盘 void drawBoard(); // 根据鼠标位置获取棋子位置 void getChessPos(int *x, int *y); // 绘制棋子 void drawChess(int x, int y, ChessType type); // 判断胜利方 ChessType getWinner(); int main() { initgraph(300, 300); // 初始化窗口大小 setbkcolor(WHITE); // 设置背景颜色为白色 cleardevice(); // 清屏 // 初始化棋盘 int i, j; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { board[i][j] = NONE; } } // 绘制棋盘 drawBoard(); // 游戏循环 while (!isGameOver()) { int x, y; getChessPos(&x, &y); if (board[x][y] == NONE) { board[x][y] = currentPlayer; drawChess(x, y, currentPlayer); currentPlayer = (currentPlayer == PLAYER1) ? PLAYER2 : PLAYER1; } } // 游戏结束,输出胜利方 ChessType winner = getWinner(); if (winner == PLAYER1) { outtextxy(100, 150, "Player1 wins!"); } else if (winner == PLAYER2) { outtextxy(100, 150, "Player2 wins!"); } else { outtextxy(100, 150, "Game over!"); } getch(); // 等待任意键结束 closegraph(); // 关闭图形窗口 return 0; } int isGameOver() { int i, j; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (board[i][j] == NONE) { return 0; } } } return 1; } void drawBoard() { setlinecolor(BLACK); // 设置线条颜色为黑色 int i, j; for (i = 1; i < ROW; i++) { line(0, i * SIZE, COL * SIZE, i * SIZE); } for (j = 1; j < COL; j++) { line(j * SIZE, 0, j * SIZE, ROW * SIZE); } } void getChessPos(int *x, int *y) { int mx = mousex(); // 获取鼠标横坐标 int my = mousey(); // 获取鼠标纵坐标 *x = mx / SIZE; // 计算格子横坐标 *y = my / SIZE; // 计算格子纵坐标 } void drawChess(int x, int y, ChessType type) { int cx = x * SIZE + SIZE / 2; // 计算棋子横坐标 int cy = y * SIZE + SIZE / 2; // 计算棋子纵坐标 if (type == PLAYER1) { setfillcolor(RED); // 设置颜色为红色 fillellipse(cx, cy, SIZE / 2 - 5, SIZE / 2 - 5); // 绘制棋子 } else if (type == PLAYER2) { setfillcolor(BLUE); // 设置颜色为蓝色 fillellipse(cx, cy, SIZE / 2 - 5, SIZE / 2 - 5); // 绘制棋子 } } ChessType getWinner() { int i, j; // 判断行是否相同 for (i = 0; i < ROW; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) { return board[i][0]; } } // 判断列是否相同 for (j = 0; j < COL; j++) { if (board[0][j] == board[1][j] && board[1][j] == board[2][j]) { return board[0][j]; } } // 判断对角线是否相同 if (board[0][0] == board[1][1] && board[1][1] == board[2][2]) { return board[0][0]; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0]) { return board[0][2]; } return NONE; } ``` 其中,需要将EASYX图形库的头文件和库文件导入项目中。此外,还需要安装对应的编译器,比如Dev-C++或Visual Studio等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值