连连看C++程序设计
C#实现连连看功能(推荐)
C#实现连连看功能(推荐)
本⽂是利⽤C#实现连连看的⼩例⼦,以供学习分享使⽤。
初始化布局(横竖⼗⾏⼗列,共100个单元格,每⼀个格⼀个按钮,背景图为⽔果图⽚,随机⽣成)。
初始化对应棋盘(⽤⼆维数组表⽰【0表⽰空⽩,⾮0表⽰界⾯对象】)和页⾯相对应,同步操作。
判断点击的图⽚是否可以消掉(转化为⼆维数组【以⽔平⽅向,垂直⽅向,⼀个拐⾓,两个拐⾓的步骤进⾏判断】)。
如可以消掉,隐藏图⽚,增加分数。
时间限制,采⽤倒计时⽅式。
线程:Thread,后台运⾏时间控制【倒计时⽅式】。
界⾯闪烁:当界⾯中的控件较多,且有背景图时,界⾯就会出现闪烁【解决⽅式:1,双缓冲⽅式 2. 设置控件创建样式,统⼀刷新】。
TableLayoutPanel:表⽰⼀个⾯板,它可以在⼀个由⾏和列组成的⽹格中对其内容进⾏动态布局【新增元素,设置⾏列,以及样式】。
资源⽂件:Resources ⽤于存放图⽚及其他资源。
Button:FlatAppearance获取⽤于指⽰选中状态和⿏标状态的边框外观和颜⾊。
效果图图下(⼀)【开始,初始化后,倒计时功能,停⽌功能】:
效果图(⼆)【时间结束】
核⼼代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34/// <summary>
/// 连连看帮助类
/// </summary>
public class LinkHelper
{
/// <summary>
连连看源码(C++)
for (c=c1+1;c<c2;c++) flag=flag || map[SQ(r1,c)];
if (!flag) return true; } if (SAME_COL(sq1,sq2)){
flag=false; for (r=r1+1;r<r2;r++)
flag=flag || map[SQ(r,c1)]; if (!flag) return true; } return false; } bool line2(int sq1,int sq2) { int sq; sq=SQ(ROW(sq1),COL(sq2)); if (map[sq]==0 && line1(sq,sq1) && line1(sq,sq2)) return true; sq=SQ(ROW(sq2),COL(sq1)); if (map[sq]==0 && line1(sq,sq1) && line1(sq,sq2)) return true; return false; } bool line3(int sq1,int sq2) { int sq,edge; sq=sq1-1;//left edge=SQ(ROW(sq1),0); while(map[sq]==0&&sq>=edge){ if (line2(sq,sq2))
C语言程序设计连连看
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <iostream>
using namespace std;
#include <ctime>
int mai() //倒计时
{
for (int i=3; i>=0; i--)
{ long t = time(NULL);
for(;;)
{
long n = time(NULL);
if(n != t)
break; }
system("cls");
cout<<"
"<<endl;
cout<<"
"<<endl;
cout<<" 离史上最卡哇依的游戏开始还有** " << i << " **秒
哦!!!"<<endl;
}return 0;
}
void init1();
void print1();
int exit1();
void init2();
void print2();
int exit2();
void init3();
void print3();
int exit3();
void near1(int a,int b,int a1,int b1);
char chessman[10][10];
void main() //主函数
{ time_t start,end,time;
start=clock();
(完整版)连连看C语言毕业课程设计报告
(完整版)连连看C语言毕业课程设计报告
目录
问题描述
连连看是一款简单有趣的小游戏,曾经风靡一时,玩家要将相同的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手,游戏速度节奏快,画面清晰可爱,适合细心的玩家。游戏胜利条件的判定:将棋盘上面的格子全部消除掉;失败的判定:规定的时间内格子没有消除。
问题分析
连连看需要解决的问题包括:
(1)整个游戏界面和各种图案的图形显示;
(2)如何判断鼠标所点的两个图像能否相消;
(3)如何判断是否消除完全;
(4)如何判断游戏的结束及如何终止游戏;
(5)游戏难度的设计和得分规则
游戏总的流程可以描述如下:首先出现游戏界面,一幅由10*6的小图片的构成的画面,玩家需要点击2 个相同图案的对子,其连接线不多于3 根直线,也就是说连接相同图案时,直线只能有两个折点,就可以成功将对子消除。
此外,需要重点考虑的是游戏面板和各种形状的方块的数据结构表示。格子面板可以用一个二维数组来表示。
1、开发工具的介绍
【VS2008 】
VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效开发Windows应用程序。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时Visual Studio 2008支持项目模板、调试器和部署程序。Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用
和Mobile应用。VS的开发界面分为两个版本:整合模式和孤立模式,分别对基于语言的开发和基于特别工具的开发作了优化。【EasyX 】EasyX 是针对C++ 的图形库,可以帮助C 语言初学者快速上手图形和游戏编程。
C#课件:连连看游戏的设计与实现
系统需求分析
游戏初始化,初始化模块包括设置游戏图案的种类、 重复图案的个数。
游戏开始,具体应该包括主画面图案的随机布局, 连连看游戏算法的实现,游戏过程中要有友好的提 示信息等。
游戏分数计算,计算玩家的当前游戏得分情况。 游戏界面重排功能,当玩家肉眼实在难以看出是否
有可以消去的图案时候,可以单击重排让界面上的 图片重新排列,有利于游戏的继续进行。但是重排 需要有一定的次数限制,并且能够在界面上显示。 时间显示,使用滚动条显示游戏的剩余时间。
系统结构设计
系统功能模块图和实现结构图如下:
基于.NET的连连看游戏
游
游
游
循
游
游
游
游
戏
戏
戏
环
戏
戏
戏
戏
设
界
规
背
图
得
பைடு நூலகம்
时
提
置
面
则
景
案
分
间
示
功
布
实
音
重
计
控
信
能
局
现
乐
排
算
制
息
开发技术简介
开发工具 Visual Studio 2005 .NET Framework 2.0
基于C#语言的Windows应用程序
连连看小游戏开发教程
连连看小游戏开发教程
连连看是一款经典的益智游戏,玩家需要在规定时间内消除相同的图标。本文将为你详细介绍如何开发一个连连看小游戏。以下是游戏开发的步骤:
1. 游戏规则设计
连连看游戏的基本规则是玩家需要通过点击两个相同的图标来消除它们,但这两个图标之间的连线不能超过三个直线。可以通过第三个图标或直线来连接这两个图标。在你开始编码之前,需要明确你的游戏规则,并考虑游戏难度、时间限制和游戏界面设计等因素。
2. 确定游戏素材
接下来,你需要准备游戏所需的素材。包括不同种类的图标、游戏背景以及其他界面元素。你可以通过自己绘制或者使用现成的资源来获得所需的图标和背景。确保素材的大小和样式一致,以保持游戏整体的美观度。
3. 游戏界面搭建
在游戏开始之前,你需要创建一个游戏窗口和菜单。游戏窗口应该包含游戏背景、图标网格和计时器等元素。为了增加游戏体验,你可以添加背景音乐和声效。
4. 图标布局生成
在游戏开始之前,你需要生成一个包含各种图标的图标布局。可以
采用二维数组来表示图标的排列。确保图标之间没有直接相连的路径,避免玩家无法消除。你可以使用随机算法来生成不同的图标布局。
5. 图标点击事件处理
当玩家点击某个图标时,需要对点击事件进行处理。首先,你需要
判断点击的图标是否可以被消除。通过遍历图标布局,找到与点击的
图标相同的图标,再判断这两个图标之间是否有可用的路径。如果存
在可用路径,将这两个图标从布局中移除,否则,显示错误信息。
6. 连线绘制
在点击两个可消除的图标后,你需要绘制一条连接这两个图标的路径。可以使用线段或曲线来表示路径。为了增加视觉效果,你可以在
连连看游戏编程教程
连连看游戏编程教程
连连看游戏是一款经典的益智类游戏,其独特的游戏规则让玩家们在娱乐的同时提高了思维能力和反应速度。本篇文章将为大家介绍如何使用Python语言编写一个简单的连连看游戏。
一、游戏规则的设计
在开始编写代码之前,我们需要先设计游戏规则。连连看游戏的目标是通过消除相同图标的配对来清空游戏界面上的所有方块。具体的游戏规则如下:
1. 游戏界面是一个矩阵,每个方块上都有一个图标。
2. 玩家需要通过连接相同图标的路径来消除方块。路径只能在水平和垂直方向上进行连接,不能有其他方块阻挡。
3. 每次消除相同图标的方块会得到一定的分数,随着游戏的进行,剩余方块的数量会减少。
4. 游戏会根据玩家的分数和剩余方块数量进行评分和排名。
二、游戏界面的设计
在编写代码之前,我们需要使用Python中的图形库创建游戏界面。这里我们推荐使用Pygame库,它是一款功能强大且易于上手的游戏开发库。
首先,我们需要创建一个窗口以及游戏界面的矩阵。可以使用Pygame库提供的Surface对象来创建窗口,并使用二维列表来表示游戏界面的矩阵。
接下来,我们需要在窗口中绘制游戏界面的方块和图标。可以使用Pygame库提供的绘制函数来实现,通过循环遍历游戏界面的矩阵,根据方块的状态来选择绘制的图标。可以使用不同的颜色或者图片来表示不同的图标。
三、游戏逻辑的设计
游戏逻辑是编写连连看游戏的核心部分。主要包括方块的生成、方块的选择和判断是否可以连接的函数。
首先,在游戏开始时,需要生成随机的方块,并将其放置在游戏界面的矩阵中。
然后,需要实现方块的选择函数,玩家可以通过鼠标点击方块来选择两个需要连接的方块。可以使用Pygame库提供的事件监听函数来实现。
C语言实现连连看
南京航空航天大学计算机专业
专业:计算机科学与技术学院
姓名:杨万
学号:161310224
“mymain.cpp”文件中代码
#include <iostream>
using namespace std;
#include <stdio.h>
#include <fstream>
#include <windows.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "lianliankan.h"
int main()
{
Game mygame;
int selection;
while(true)
{
mygame.GameMenu();
cout<<"请输入:"<<endl
<<"数字1进入游戏;"
<<"数字2继续游戏;"
<<"数字3选择游戏难度;"
<<"数字4选择游戏模式;"
<<"数字5查看排行榜;"
<<"数字0退出游戏."<<endl;
cin>>selection;
if(selection<0||selection>5)
{
cout<<"输入错误"<<endl;
system("cls");
continue;
}
DWORD game_start, game_end;
switch(selection)
连连看思路算法及实现
连连看思路算法及实现
连连看是一款经典的益智游戏,其玩法简单,规则清晰,深受广大玩
家喜爱。在这个游戏中,我们需要通过消除相同的图案来获得高分。
而要想在游戏中取得好成绩,则需要掌握一定的思路算法和实现方法。
一、思路算法
1.寻找相同图案
在连连看游戏中,最基本的操作就是寻找相同的图案。因此,在进行
游戏时,我们需要将所有可消除的图案都找出来,并建立起它们之间
的关联关系。
2.建立关联关系
建立图案之间的关联关系是为了方便后续操作。我们可以使用二维数
组或者链表等数据结构来存储每个图案以及它们之间的连接情况。对
于每一个图案,我们可以将其坐标作为数组下标,并将其与周围相邻
的图案进行连接。
3.寻找可消除路径
在建立好每个图案之间的连接关系后,我们就可以开始寻找可消除路
径了。通常情况下,可消除路径有两种:直线型和弯曲型。对于直线
型路径,我们只需要判断两个图案之间是否存在直线连接即可;而对
于弯曲型路径,则需要考虑路径中是否存在转折点。
4.消除图案
当我们找到了可消除路径后,就可以进行图案的消除操作了。在消除时,我们需要将所有经过的图案都从数据结构中删除,并将得分累加
到总分中。此外,在进行消除操作时,我们还需要考虑一些特殊情况,如图案之间存在障碍物等。
5.判断游戏结束
当所有的图案都被消除或者无法再进行消除操作时,游戏就结束了。
在判断游戏是否结束时,我们可以检查当前数据结构中是否还有未被
消除的图案。如果存在未被消除的图案,则说明游戏还未结束;否则,游戏就已经结束了。
二、实现方法
1.数据结构
在实现连连看游戏时,我们通常使用二维数组或链表等数据结构来存储每个图案以及它们之间的连接关系。对于二维数组来说,其优点是存储简单、操作方便;而链表则更加灵活,可以动态地添加和删除元素。
C# 连连看 游戏 连线 代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Timers;
namespace LLKAN
{
class Game
{
///
/// 游戏是否正在进行
///
public bool Playflag;
public bool CanPlay;
public bool PlayWin;
public const int Row = 12;
public const int Column = 17;
public GamePic[,] GamePicList = new GamePic[Row, Column];
private GamePath MyPath = new GamePath();
public Game()
{
this.CanPlay =false;
this.PlayWin = false;
}
///
/// 游戏开始
///
public void GameStart(int pn)
{
// 游戏开始,产生随机图片
stdFunc PubstdFunc = new stdFunc();
int[] PicNumber = new int[Row * Column];
//int pn;
PicNumber = PubstdFunc.GetRandomPic(pn, (Row - 2) * (Column - 2));
for (int i = 1; i<=Row-2; i++)
C语言实现数字连连看
C语⾔实现数字连连看
本⽂实例为⼤家分享了C语⾔实现数字连连看的具体代码,供⼤家参考,具体内容如下
要求
连连看⼩游戏开发,使⽤⼆维数组来保存游戏地图的数据,实现连连看的核⼼功能。欢乐连连看的功能有:主界⾯、开始游戏、消⼦、判断胜负、提⽰、重排、计时、游戏模式。
主界⾯
游戏主界⾯就是进⾏各项操作的⼊⼝。
开始游戏
玩家选择开始游戏模式,进⼊游戏后,选择开始游戏,系统根据设置随机⽣成数字,以供玩家点击消除。
消⼦
对玩家选中的两张图⽚进⾏判断,判断是否符合消除规则。只有符合以下规则的图⽚对才能被消除:
⼀条直线连通
两条直线连通
三条直线连通
如果可以消除,两个数字变为0。如果不能消除,则保持原来的游戏地图。
判断胜负
当游戏完成后,需要判断游戏胜负。不同模式下判断胜负的规则不同。
基本模式时,如果在五分钟内将游戏地图的所有图⽚都消除,则提⽰玩家胜利。
休闲模式时,如果游戏地图中所有图⽚都被消除,则提⽰玩家获胜。
提⽰
可以提⽰界⾯上能够消除的⼀对图⽚。
计时
设定⼀定时间来辅助游戏是否结束。
游戏模式
游戏模式有:基本模式、休闲模式和关卡模式三种,可以根据是否定时等规则进⾏设置。
代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WIDTH 10
#define HEIGHT 12
int datas[HEIGHT][WIDTH] = {0};
int Choose_type ();
void Creat_datas (int fol);
C语言实现简易连连看游戏
C语⾔实现简易连连看游戏
本⽂为⼤家分享了C语⾔实现连连看游戏位的具体代码,供⼤家参考,具体内容如下
题⽬
给定⼀个2N×2N的⽅阵⽹格游戏盘⾯,每个格⼦中放置⼀些符号。这些符号⼀定是成对出现的,同⼀个符号可能不⽌⼀对。程序读⼊玩家给出的⼀对位置(x1,y1)、(x2,y2),判断这两个位置上的符号是否匹配。如果匹配成功,则将两个符号消为“*”并输出消去后的盘⾯;否则输出“Uh-oh”。若匹配错误达到3次,则输出“Game Over”并结束游戏。或者当全部符号匹配成功,则输出“Congratulations!”,然后结束游戏。
输⼊格式及样例
格式
输⼊在⼀⾏中给⼀个正整数N(<5)。随后2N⾏,每⾏2N个⼤写英⽂字母(其间以1个空格分隔),表⽰游戏盘⾯。盘⾯之后给出⼀个正整数K,随后K⾏,每⾏按照格式“x1y1x2y2”给出⼀个玩家的输⼊。注意格⼦的⾏、列编号是从1到2N。
样例
2
I T I T
A B A B
A A A A
C D C D
9
1 1 1 3
1 2 1 4
2 1 2 3
2 2 2 4
3 1 3 2
3 3 3 4
4 1 4 3
4 2 4 3
4 2 4 4
输出格式及样例
格式
根据玩家的每⼀步输⼊,输出相应的结果。输出盘⾯时注意,每⾏字符间以1个空格分隔,⾏末不得有多余空格。
样例
参考代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void Print(int n,char**arr);
连连看游戏C语言源代码
连连看游戏C语言源代码
#include 〈stdio.h>
#include 〈graphics.h>
#include 〈stdlib.h〉
#include <math。h〉
#include 〈dos。h〉
#define true 1
#define false 0
/* --—-----—-——--—--—-—-全局变量———--————----—--———---——--—-—-—--——— */
int BkGndColor=BLACK;
int BorderColor=LIGHTGRAY;
int LineColor=LIGHTBLUE;/*消除一对方块时时候的连线颜色*/
/* Pb — ProgressBar */
int PbColor=LIGHTGREEN;
int PbY=4;
int PbHeight=4;
int PbValue; /* 进度条百分比,初始值为100.*/
long StartTime; /*开始时间的秒数,只统计分钟,秒*/
long TotalTime; /*游戏总共的最大秒数!,*/
/* BoardDatas: a small-size board */
/* Board[x][y][0] - 0:empty, 1:filled */
/* Board[x][y][1] - cell’s key; */
unsigned char Board[10][10][2];
int CellSize=30;
int BoardX=20;
int BoardY=60;
int BoardWidth=10;
连连看游戏C语言源代码
连连看游戏C语言源代码
#include
#include
#include
#include
#include
#define true 1
#define false 0
/* ---------------------全局变量------------------------------------ */
int BkGndColor=BLACK;
int BorderColor=LIGHTGRAY;
int LineColor=LIGHTBLUE;/* 消除一对方块时时候的连线颜色*/ /* Pb - ProgressBar */
int PbColor=LIGHTGREEN;
int PbY=4;
int PbHeight=4;
int PbValue; /* 进度条百分比,初始值为100.*/ long StartTime; /* 开始时间的秒数,只统计分钟,秒*/ long TotalTime; /* 游戏总共的最大秒数!,*/
/* BoardDatas: a small-size board */
/* Board[x][y][0] - 0:empty, 1:filled */
/* Board[x][y][1] - cell's key; */
unsigned char Board[10][10][2];
int CellSize=30;
int BoardX=20;
int BoardY=60;
int BoardWidth=10;
int BoardHeight=10;
int CellColor=WHITE;
C 课程设计_连连看游戏
课程设计报告
课程名称:面向对象程序设计C++
设计题目:连连看游戏
专业:计算机科学与技术
姓名:
学号:
指导教师:李晓虹
2016 年 1 月 1 日
1、系统需求分析
本程序是一款连连看游戏,该程序应该具备以下功能:
(1)该游戏界面为黑色背景加方格图片类型,不同的图片上有不同的图案,位置为随机打乱。
(2)游戏规则为将相同图案的图片进行连接,但需满足只能至少单边无阻呈直线连接,否则无效。一旦成功连接两个相同的图案,则这两个图案消失,如此反复直到所有的图片消失,游戏通关。
(3)图片的位置具有随机性,但要求都是必须成对出现。
1.1 功能需求
(1)主界面需求
显示玩家当前关卡数及得分数
提供“新游戏”按钮,单击后可以重新开始游戏
提供“退出”按钮,单击后可以退出程序
提供“帮助”按钮,单击后可以弹出制作人信息,联系方式等
(2)消除需求
玩家点击图案,图案会变色以提示被选中;此时再点击另一个图案,如果图案相同,则这两个图案消失;此外,两个图案中间必须无其他图片阻碍才有效,消除规则如下:
一条直线相连:
图1-1
两条直线相连:
图1-2
图1-3
(3)新游戏需求
当玩家点击新游戏按钮时,游戏将重新生成新的图案并重排,且重排的方式是随机的。
(4)帮助
当玩家点击帮助时,将弹出制作者信息以及秘籍。
(5)退出
点击退出按钮,将退出程序。
1.2时间性能需求
响应速度:3秒以内
客户端:可执行文件,点开即可运行,方便快捷。
1.3界面友好需求
系统提供统一的界面操作方式。要求界面操作方式美观大方,布局合理,功能完善,整个操作简单,对于初级用户容易上手。良好的操作界面可以给游戏玩家带来更好地游戏体验和愉悦的心情。复杂的游戏界面会造成玩家的负担,所以在设计程序时,功能以及各种操作都应当尽量简单明了。
连连看小游戏编程实现
连连看小游戏编程实现
连连看是一种非常经典的益智游戏,通过连接相同图案的方块来消
除它们,最终目标是将所有方块都消除完毕。本文将介绍如何使用编
程语言实现一个简单的连连看小游戏。
1. 游戏规则
连连看游戏的规则非常简单,玩家需要找到两个相同图案的方块,
且它们之间的连线不能超过两个弯角。当玩家成功连接一对相同的方
块时,这对方块将会消失,同时玩家获得一定的分数。玩家需要尽可
能快地消除所有方块,以获取更高的分数。
2. 游戏界面设计
在编程实现连连看游戏时,我们需要设计一个美观且易于操作的游
戏界面。可以使用图形库来实现游戏界面的绘制,比如Python的Tkinter库或者C++的SFML库。游戏界面需要包括以下几个组件:
a. 方块区域:用于显示游戏的方块布局,可以使用矩阵形式表示,每个元素表示一个方块。
b. 分数显示区域:用于显示玩家当前的得分情况。
c. 时间显示区域:显示剩余的游戏时间。
d. 游戏操作按钮:如开始游戏按钮、重新开始按钮等。
3. 方块生成
在游戏开始时,需要生成一定数量的方块,并将它们随机地分布在
方块区域内。可以使用随机数生成算法来实现方块的随机生成,同时
需要保证每种方块的数量相等。
4. 连接算法
玩家通过点击两个相邻且相同的方块来进行消除。为了判断两个方
块是否可以相连,我们需要实现一个连线算法。一种简单的实现方法
是使用深度优先搜索算法(DFS)来寻找两个方块之间的路径。通过遍历方块区域,查找与当前选中方块相同的邻居方块,然后递归搜索相
邻方块的邻居,直到找到目标方块或者无法继续搜索为止。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
源程序代码
//main.cpp
#include
using namespace std;
#include
#include
#include"class.h"
void main()
{
GridInfor g;
initgraph(M,N);
mciSendString("play game_begin.mp3 repeat", NULL, 0, NULL);
g.InitFace();
while(1)
{
mouse = GetMouseMsg();
switch(mouse.uMsg)
{
case WM_MOUSEMOVE:
g.Mousemove(mouse.x,mouse.y); break;
case WM_LBUTTONDOWN:
if(Single_click_judge(mouse.x,mouse.y))
{
g.Leftbottondown(mouse);
} break;
default: break;
}
}
closegraph();
}
void GridInfor::RandGrid() //产生图片的标记{
for(int iCount = 0, x = 1; x <= ROW; ++x )
{
for( int y = 1; y <= COL; ++y )
{
::GridID[x][y] = iCount++ % GridNum + 1;
} } }
void GridInfor::Shuffle( ) //打乱棋盘
int ix, iy, jx, jy, grid;
for( int k = 0; k < 84; ++k )
{
ix = rand() % ROW + 1; // 产生1 - COL 的随机数
iy = rand() % COL + 1; // 产生1 - ROW 的随机数
jx = rand() % ROW + 1; // 产生1 - COL 的随机数
jy = rand() % COL + 1; // 产生1 - ROW 的随机数
if( ::GridID[ix][iy] != ::GridID[jx][jy] ) //如果不相等就交换数据
{
grid = ::GridID[ix][iy];
::GridID[ix][iy] = ::GridID[jx][jy];
::GridID[jx][jy] = grid;
} } }
////////////////////////////////初始化界面///////////////////////////////////////
void GridInfor::InitFace()
{
srand((unsigned)time(NULL));
a.Load_picture();
a.RandGrid();
IMAGE image3;
loadimage(&image3,"res\\bg.bmp");
putimage(0,0,&image3);
getimage(&image2,3 * 42,2 * 48,42, 48);
a.Shuffle();
a.ShowGrid();
}
void GridInfor::Load_picture() //加载图片{
IMAGE image1,background;
loadimage(&image1,"IMAGE","grids");
SetWorkingImage(&image1);
for(int i = 1 ;i < GridNum + 1 ;i ++)
for(int j = 0;j < 2;j++)
getimage(&image[i][j],j * 42,i * 48,42, 48);
loadimage(&background,"IMAGE","bg");
SetWorkingImage(&background);
getimage(&image2,3 * 42,2 * 48,42, 48);
SetWorkingImage();
putimage(0,0,&background);
}
void GridInfor::ShowGrid()
{
int idx,idy;
for(int i = 0 ;i < ROW; i ++)
for(int j = 0 ;j < COL ; j++)
{
idy = i * 48 + topedge ,idx = j * 42 + leftedge;
putimage(idx,idy,&image[::GridID[i + 1][j + 1]][0]);
} }
/////////////////////////////////鼠标操作////////////////////////////////////////
void GridInfor::Mousemove (int leftx,int lefty) //鼠标移动时的变化{
static int prex,prey,preidx,preidy, curidx,curidy;
if(Judg_val(leftx,lefty))
{
TranstoDracoor(leftx,lefty,&curidx,&curidy); //转化为图纸坐标
if(::GridID[curidy][curidx] != 0)
{
GridPhy_coor(leftx,lefty);
if(pre.idx == preidx && pre.idy == preidy)
putimage(prex,prey,&image[::GridID[preidy][preidx]][1]);
else
putimage(prex,prey,&image[::GridID[preidy][preidx]][0]);
prex = leftx, prey = lefty;
preidx = curidx, preidy = curidy;
Draw_frame(leftx,lefty); //绘制边框
} } }
void GridInfor::Leftbottondown (MOUSEMSG mouse) //左击时的变化{
static int click = 0, idx,idy;
click++;
SeleReact (mouse.x,mouse.y); //显示选中效果
if(click == 1) RecordInfor(mouse.x,mouse.y,pre);
if(click == 2)
{
TranstoDracoor (mouse.x,mouse.y,&idx,&idy);
if(idx != pre.idx || idy != pre.idy)
{
RecordInfor (mouse.x,mouse.y,cur);
if(pre.GridID == cur.GridID && DesGrid(pre,cur))
{