C语言写扫雷小游戏2

这是下午写的,这次的修改增加了鼠标的事件,需要的是windows的消息机制,WinAPI函数,以下是新添加的定义

struct
{
	int num;//格子当前状态,1表示有雷,0表示无雷或已经显示数字
	int roundnum;//统计格子周围的雷数
	int flag;//右键按下显示红旗标志,0表示没有,1表示有
}Mine[10][10];

POINT Mouse;//定义鼠标事件
int MouseX, MouseY;//鼠标的x,y坐标
int mineNUM;//统计处理过的格子数
TCHAR randmineNUM[100];//显示数字的字符串

Mine[10][10]是10*10的格子,POINT是鼠标结构的别名,可以看定义是x和y的坐标

typedef struct tagPOINT
{
    LONG  x;
    LONG  y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;

接着在Game()中添加判断鼠标位置的语句,用来判断是否重新开始

if (WM_LBUTTONDOWN)//鼠标左键按下事件
{
	GetCursorPos(&Mouse);//获取鼠标当前的坐标,POINT MOUSE定义
	MouseX = Mouse.x;
	MouseY = Mouse.y;
	if (MouseX > 90 && MouseX<110 && MouseY>5 && MouseY < 25)
	{
		FLAG = 1;
		continue;
	}
}
if (_kbhit())//判断有按键退出
{
	break;
}

接着在GameBegin()添加关于鼠标的操作,并且随机产生雷数,以下是完整代码

void GameBegin(void)
{
	int i, j;
	cleardevice();
	if (PLAY != 1)
	{
		SetCursorPos(100, 10);//设置鼠标初始位置
		MouseX = 100;
		MouseY = 10;
	}
	PLAY = 1;
	mineNUM = 0;
	setfillstyle(SOLID_FILL);//此处用法和TC不同
	setfillcolor(WHITE);
	bar(0, 0, 200, 230); //设置背景区域
	for (i = 0; i < 10; i++) //绘制每个雷区(小格)
	{
		for (j = 0; j < 10; j++)
		{
			DrawEmpty(i, j, 0, LIGHTGRAY);
		}
	}
	setcolor(GREEN);
	//DrawSMile();
	rand();//产生随机数
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			srand((unsigned)time(NULL));//根据时间给随机数不同的种子数
			Mine[i][j].num = rand() % 8;//随机数产生范围0-7

			if (Mine[i][j].num == 1)
			{
				mineNUM++;
			}
			else
			{
				Mine[i][j].num = 2;
			}
			Mine[i][j].flag = 0;
		}
		_stprintf_s(randmineNUM, _T("%d"), mineNUM);//将minrNUM转换成字符串类型
		setcolor(WHITE);
		settextstyle(16, 0, _T("0"));
		outtextxy(2, 2, randmineNUM);
		mineNUM = 100 - mineNUM;
	}
}

由于调用了许多WinAPI和其他函数,所以要包含以下头文件

#include<stdio.h>
#include<graphics.h>
#include<windows.h>
#include <easyx.h>
#include<conio.h>  //_kbhit()
#include<stdlib.h> //rand(),srand()
#include<time.h>   //srand((unsigned)time(NULL))

OK,today is enough!

时间: 2024-11-10 22:57:39

C语言写扫雷小游戏2的相关文章

C语言写扫雷小游戏1

用的ide是vs 2013,自己学习都是参考网上的代码,由于vs不带tc的graphics.h,所以下载easyx库,将include和lib复制到vc的目录. easyx的graphics.h和tc的还是有区别的,百科上的示例 使用上,基本和 Turbo C没太大区别.启动Visual C++,创建一个控制台项目(Win32 Console Application),然后引用 graphics.h 头文件就可以了.看一个画圆的例子: #include <graphics.h> // 就是需要

C语言写炸弹人小游戏

陆续改了半个月,不断更改游戏目的,结合了老鼠走迷宫和贪吃蛇游戏,终于在昨天凌晨2点写好了我的炸弹超人游戏.基于Windows图形界面,用C语言编写.虽然并不复杂,但收获颇多. 文件1:winapp.cpp,指导老师所给框架及自己写的主函数: #include <windows.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;#include "winapp.h"#include "myfile.h&

C语言 三子棋 小游戏

//C语言 三子棋 小游戏 //棋盘为3x3大小,电脑棋子 X ,玩家 O : //用命令窗口模拟3子棋,玩家与电脑轮流下,先连成3子判赢:无路可走判平局 #include<stdio.h> #include<string.h> #include<windows.h> int judge_is_moved(char arr[][12], int place); void print_chessboard(char arr[][12])//输出棋盘 { int i = 0

实习2个月后,第一次自己写的小游戏来玩玩

这是小弟第一次写的小游戏,基于jQ写的,没用面向对象思维去写,可能写得不好,请见谅,亲测是能玩的!! 尾部我附上材料图片提供大家下载 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta charset="utf-8" /> <

一款JavaScript开发的扫雷小游戏

<style><!-- #FLM_main { margin:50px auto; padding:20px; background:#EEE; zoom:1; width:650px; } #FLM_main table { border-collapse:collapse; background:#EEE; float:left; } #FLM_main table td { border:1px solid #CCC; font-size:20px; width:38px; hei

练手WPF(三)——扫雷小游戏的简易实现(中)

原文:练手WPF(三)--扫雷小游戏的简易实现(中) 八.随机布雷 /// <summary> /// 随机布地雷 /// </summary> /// <param name="mineNum">地雷数</param> private void SetRndMine(int mineNum) { for (int k = 0; k < mineNum; k++) { int nullnum = 0; for (int j = 0;

用Python写一个小游戏

刚学Python时间不长,但也知道了一点,看别人的参考写了一个猜数字小游戏,也算是禹学于乐吧. #!/usr/bin/env   python #coding=utf-8 import random secret = random.randint(1,100) guess,tries = 0,0 print u"已经给出了一个1-99的数字" while guess != secret and tries < 5: print u"请给出你猜的数字:" pri

结对博客(扫雷小游戏)

结对题目:基于一款课下娱乐的小游戏—扫雷 一.需求分析: 1.背景:在现在社会,人们的工作和学习压力不断增大,空余时间时间日益减少,一些大型的娱乐游戏又耗费大量的娱乐时间, 又不一定对身体有益,因此不耗费大量时间的小游戏,方便有趣,是大势所趋. 2.目的:编译此系统是为了在工作和学习之余得到适当的放松,既不浪费大量时间,又可以锻炼自己的思维,缓解疲劳. 3.应用人群:本游戏是基于windows下的小游戏,对人基本没有害处,因此能接触computer的人都可以玩这款游戏. 4.设计概述: 本游戏界

2017.12.16 扫雷小游戏未完成

package saolei; /* * 设计一个二维数组,用于存放雷和周围八个格子雷的个数, * 再定义两个一维数组分别存放雷的X和Y坐标, * 布雷,记录周围八个格子雷的个数. */ import java.util.Random; public class Block { protected int[][] Array;//用于存放雷和周围雷的个数 protected int[] ArrayTestX;//用于存放雷的X坐标 protected int[] ArrayTestY;//用于存