C# 拼图游戏的实战(附demo)

目录
  • 一、项目分析
    • 1、用户需求分析
    • 2、系统设计思路
    • 3、系统模块划分
  • 二、项目设计
    • 1、各个子模块的设计方法
      • 板块一:注册用户并进行登录。
      • 板块二:导入图片。
      • 板块三:设置关卡所能选的难度。
      • 版块四:拼图是否完成的判断。
      • 板块五:切割图片。
      • 板块六:打乱拼图。
      • 板块七:重排图片,反映现在拼图的状况。
      • 板块八:切成图后的小图片移动。
    • 2、设计核心技术
  • 三、项目测试
  • 四、结论

一、项目分析

项目分析简要说明项目主要用户需求、设计思路及模块划分。

1、用户需求分析

在当今社会,人们的生活压力越来越大,也没有太多时间去玩大型的游戏,所以需要一些简单的小游戏来缓解大家的工作和学习压力。而连连看是一款简单,容易理解,大多数人都会玩的小游戏,耗费时间也不是太长,所以特意设计此款游戏来满足用户放松心情的需求。

2、系统设计思路

(1)进行游戏用户的注册以及登录;
(2)先导入图片,并进行切割
(3)随机丢弃一张小切图,并打乱顺序
(3)窗体基本的功能选择栏需实现;
(4)可以判定游戏确定输赢,当拼成时提示成功;
(5)点击图片要能进行移动;
(6)右侧要有重排后的显示框便于玩家游戏的完成。

3、系统模块划分

板块一:注册用户并进行登录。
板块二:导入图片。
板块三:设置关卡所能选的难度。
拼图游戏应该有关卡选择33型,44型,5*5型等等。设置多个关卡可以让用户体验游戏更具挑战性。
版块四:拼图是否完成的判断。
通过判断图片对应结构体的数字是否完全顺序排列来判断游戏是否胜利。
板块五:切割图片。
板块六:打乱拼图。
板块七:重排图片,反映现在拼图的状况。
板块八:切成图后的小图片移动。
该过程是整个游戏的核心过程,是最重要的一个过程,用户通过点击图片来移动图片,如果图片临近白块,则图片移动到白块位置;反之则不移动。

二、项目设计

详细介绍项目各个子模块的设计方法及设计核心技术。

1、各个子模块的设计方法

板块一:注册用户并进行登录。

通过两个窗体来完成注册登录的步骤。注册主要用到文件读取的方法:

StreamReader reader = new StreamReader("name.txt");

并通过写入函数讲用户注册名写入:

StreamWriter writer = new StreamWriter("name.txt", true);
writer.WriteLine(textBox1.Text);
MessageBox.Show("用户注册成功,请进行登录!");
writer.Dispose();

登录道理相同。

板块二:导入图片。

导入图片用到

OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.ShowDialog();//打开文件夹选择图片
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName).GetThumbnailImage(250, 250,new Image.GetThumbnailImageAbort(delegate { return false; }),IntPtr.Zero);//使所选图片的尺寸符合所需大小

打开图片文件之后并初始其尺寸大小,便于后期切图以及用户体验。

板块三:设置关卡所能选的难度。

讲难度设置加到combox中

comboBox1.Items.Add("1");
comboBox1.Items.Add("2");
comboBox1.Items.Add("3");
comboBox1.Items.Add("4");

然后用switch对应各个难度

int Diffcult = int.Parse(comboBox1.Text);
// 根据对应难度初始化数组并给n赋值
switch (Diffcult)
{
    case 1:
        node = new Node[3, 3];
        n = 3;
        break;
    case 2:
        node = new Node[4, 4];
        n = 4;
        break;
    case 3:
        node = new Node[5, 5];
        n = 5;
        break;
    case 4:
        node = new Node[9, 9];
        n = 9;
        break;
}

版块四:拼图是否完成的判断。

通过判断函数来确定对照各个图片的结构体的数字记录来判断是否拼成

public bool JudgePicture()
{
    int count = 0;
    for (int x = 0; x < n; x++)
    {
        for (int y = 0; y < n; y++)
        {
            if (this.node[x, y].num != count)
                return false;
            count++;
        }
    }
    return true;
}

板块五:切割图片。

// 传入图片;单个图片宽,高;拼图界面的x,y长度
public Image Cutpicture(Image fImage,int width,int height,int spacex,int spacey)
{
    // 创建新图片的位图
    Bitmap bitmap = new Bitmap(width, height);
    // 创建绘制区域
    Graphics graphics = Graphics.FromImage(bitmap);
    // 截取所需原图对应区域写入作图区域
    graphics.DrawImage(fImage, 0, 0, new Rectangle(spacex, spacey, width, height), GraphicsUnit.Pixel);
    // 从作图区域生成新图
    Image fgImage = Image.FromHbitmap(bitmap.GetHbitmap());
    return fgImage;	// 返回分割后的图片
}

通过创建绘制区域,来截取所需的小图块,然后通过调用切图函数将切后的图片全部传入结构体图片数组中。

板块六:打乱拼图。

// 定义随机数用于打乱切后的图
Random lx = new Random();
Random ly = new Random();
int x = lx.Next(0, n);
int y = ly.Next(0, n);

再调用交换函数进行来进行两图片交换,进行400000次达到打乱的目的

板块七:重排图片,反映现在拼图的状况。

每次图片的点击移动事件都会进行pictureBox2.Image = BackImage();语句来存储移动后的图片,当点击button3时就会调用这个函数

// 按钮重排后再picturebox3中显示
private void button3_Click(object sender, EventArgs e)
{
    // 在pictureBox3中显示被移动后的拼图
    pictureBox3.Image = BackImage();
}

是的picturebox3的图片显示现在图片的状态

板块八:切成图后的小图片移动。

先读取鼠标点击的位置,用于判断点击的图片位置

int X = e.X / (width / n);	// 鼠标x位置整型只能取 1到n-1
int Y = e.Y / (width / n);

一共九种情况:图片在中间,四角,四边,分别判断来确定是否移动:如下面是在中间点击图片的运行代码,其他情况类似:

if (node[X + 1, Y].num == index_m)
{
    Swap(new Point(X + 1, Y), new Point(X, Y));
}
else if (node[X - 1, Y].num == index_m)
{
    Swap(new Point(X - 1, Y), new Point(X, Y));
}
else if (node[X, Y + 1].num == index_m)
{
    Swap(new Point(X, Y + 1), new Point(X, Y));
}
else if (node[X, Y - 1].num == index_m)
{
    Swap(new Point(X, Y - 1), new Point(X, Y));
}

2、设计核心技术

  • 用文件流的方法设置登录注册界面,并保存用户名信息
  • 使用GDI+的方法对图片进行切割
  • 打乱图片的时候运用大量随机数
  • 每个图片有自己的对应结构体数字,为了判断是否拼图成功
  • 当所点击图片与空白图片交换时,分九种情况:四角,四边,中间,按情况来写入交换方法
  • 当拼成功时,按照图片对应的结构体数字并调用判断函数判断

三、项目测试

简要介绍采用的测试方法和测试要点。

点击图中按钮后选择一个图片文件,将图片显示到窗口的左边

然后将图片切为指定的数目(如 3x3)的小图片,从生成的小图片中随机选择一张丢弃,将小图片按照一定规律打乱,并将显示到窗口的中间。
用户可以用鼠标点击空白方块周围的图片,被点击的图片移动到原来空白的位置,被点击图片的位置变为空白。

另设登录,注册界面

四、结论

简要总结项目的主要工作、主要结果、心得感受主要发现以及下一步应当开展的主要工作等。

主要工作:设计了一款拼图游戏主要结果:让用户有一种较好的游戏体验,并制作完成三级项目心得感受:大部分是老师上课讲过的,还有一些运用得不是很好,以及一些自己通过网络,书籍来获取的知识,当然更多的知识是陌生的,需要自己去查找,去学习,来达到学以致用的目的。下一步工作:程序仍然存在缺陷,缺少背景音乐与华丽的界面,这些问题待解决 五、项目链接

这个文档描述的版本是这个:C#-PuinPhoto_jb51.rar

还有下面这个是我闲着没事用一种极其简单的思想做的:C#-pintu_jb51.rar

到此这篇关于C# 拼图游戏的实战(附demo)的文章就介绍到这了,更多相关C# 拼图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#拼图游戏编写代码(2)

    前言:在C#拼图游戏编写代码程序设计 之 C#实现<拼图游戏>(上),上传了各模块代码,而在本文中将详细剖析原理,使读者更容易理解并学习,程序有诸多问题,欢迎指出,共同学习成长! 正文: 拼图是一个非常经典的游戏,基本每个人都知道他的玩法,他的开始,运行,结束.那么,当我们想要做拼图的时候如何入手呢?答案是:从现实出发,去描述需求(尽量描述为文档),当我们拥有了全面的需求,就能够提供可靠的策略,从而在代码中实现,最终成为作品! (一)需求: (这个需求书写较为潦草,为广大小白定制,按照最最最普

  • C#拼图游戏编写代码

    本文设计了C#拼图游戏程序,供大家参考,具体内容如下 功能描述: 1.用户自定义上传图片 2.游戏难度选择:简单(3*3).一般(5*5).困难(9*9)三个级别 3.纪录完成步数 模块: 1.拼图类 2.配置类 3.游戏菜单窗口 4.游戏运行窗口 代码文件VS2013版本: 下载链接: 拼图游戏 --------------------------------------------------我叫分割线---------------------------------------------

  • C#实现拼图游戏

    本文实例为大家分享了C#实现拼图游戏的具体代码,供大家参考,具体内容如下 (一)需求:(这个需求书写较为简单) 图片:有图 切割:拼图不是一个图,我们需要把一个整图它切割成N*N的小图 打乱:把这N*N的小图打乱顺序,才能叫拼图qwq 判断:判断拼图是否成功 交互:选择鼠标点击拖动的方式 展示原图:拼不出来可以看看 更换图片:腻了可以从本地选择一张你喜欢的来拼图 选择难度:除了2×2还可以选择切割成3×3或者4×4,看你喜欢qwq (二)设计: 使用VS的c#来实现 界面设计:picturebo

  • C#利用控件拖拽技术制作拼图游戏

    主要实现的功能: 1.程序附带多张拼图随机拼图. 2.可手动添加拼图. 3.游戏成功判断. 4.30秒超时判断. Puzzle.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms

  • C# 拼图魔方小游戏

    工作闲暇之余去逛了逛CodeProject,刚好现有项目主要用到就是winform,浏览了下照片,找到上周带着蛋挞打疫苗回家的照片,于是新生一记,如何把这些图片玩起来~ 80后应该都有印象,小时候有种玩具,叫做拼图魔方,90后00后的世界这种玩具应该早已灭绝了.一个塑料小板,上面分隔了很多小图框,通过移动这些小图框,最后拼接成完整的图片 话不多说开始吧~ 先上一张原图 代码也很简单,主要就是通过BitMap分隔现有(后面有时间可以优化下,让玩家自动上传图片,应该会更有意思)图片,然后Random

  • C# 拼图游戏的实战(附demo)

    目录 一.项目分析 1.用户需求分析 2.系统设计思路 3.系统模块划分 二.项目设计 1.各个子模块的设计方法 板块一:注册用户并进行登录. 板块二:导入图片. 板块三:设置关卡所能选的难度. 版块四:拼图是否完成的判断. 板块五:切割图片. 板块六:打乱拼图. 板块七:重排图片,反映现在拼图的状况. 板块八:切成图后的小图片移动. 2.设计核心技术 三.项目测试 四.结论 一.项目分析 项目分析简要说明项目主要用户需求.设计思路及模块划分. 1.用户需求分析 在当今社会,人们的生活压力越来越

  • python+django+mysql开发实战(附demo)

    开发工具:pycharm 环境:python3.7.4(例子中用的3.6)下载安装pycharm:http://www.jetbrains.com/pycharm/download/#section=windows分为社区版和专业版,一个免费一个收费Pycharm2021破解版下载: https://www.jb51.net/softs/598504.html下载安装python:https://www.python.org/downloads/windows/安装好开发工具和python环境后

  • jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】

    本文实例讲述了jQuery+vue.js实现的九宫格拼图游戏.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> * { margin: 0; padding: 0; } /*#piclist { width: 600p

  • Android Studio做超好玩的拼图游戏 附送详细注释源码

    目录 一.项目概述 二.开发环境 三.需求分析 四.实现过程 1.拼图游戏布局绘制 2.拼图游戏时间计时 3.拼图游戏打乱显示 4.拼图游戏碎片位置切换 5.拼图游戏成功的条件 6.拼图游戏重新开始 五.运行效果 六.项目总结 七.项目源码 一.项目概述 之前有不少粉丝私信我说,能不能用Android原生的语言开发一款在手机上运行的游戏呢? 说实话,使用java语言直接开发游戏这个需求有点难,因为一些比较复杂的游戏都是通过cocos2D或者Unity3D等游戏引擎开发出来的,然后再移植到Andr

  • 微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】

    本文实例讲述了微信小程序实现点击按钮修改view标签背景颜色功能.分享给大家供大家参考,具体如下: 1.效果展示 2.操作步骤: ① 数据绑定view样式背景属性值 ② 通过逻辑文件设置该背景属性初始值 ③ 通过点击按钮修改背景属性值 3.关键代码 index.wxml文件: <view style="background:{{viewBg}};color:white;height:100px;">我是view标签</view> <button type=

  • Flutter手势密码的实现示例(附demo)

    目录 前言 开始 绘制圆点 绘制手势路径 组合9个圆点盘和手势路径 手势密码组件的使用 上传自定义组件到pub仓库 后记 前言 本篇记录的是使用Flutter完成手势密码的功能,大致效果如下图所示: 该手势密码的功能比较简单,下面会详细记录实现的过程,另外还会简单说明如何将该手势密码作为插件发布到pub仓库. 开始 实现上面的手势密码并不难,大致可以拆分成如下几部分来完成: 绘制9个圆点 绘制手指滑动的线路 合并以上两个部分 绘制圆点 我们使用面向对象的方式来处理9个圆点的绘制,每个圆点作为一个

  • 使用js编写实现拼图游戏

    本文实例为大家分享了用js编写实现拼图游戏的具体代码,供大家参考,具体内容如下 目标 使用原生js编写一个拼图游戏,我这里写了两种拼图的方法.一种是拖拽拼图,一种是经典的九宫格拼图,可以自定义参数设置游戏难度 先看看截图效果 拖拽模式(拖拽图片切换图片) 点击模式(点击图片与空白区域切换位置) 不多说,直接上代码 css #canvasBox{         margin: 0 auto;         position: fixed;         border: 2px solid #

  • js+html5实现可在手机上玩的拼图游戏

    本文实例讲述了js+html5实现可在手机上玩的拼图游戏.分享给大家供大家参考.具体如下: 手机版的拼图.pc上用Chrome 或者 Firefox var R=(function(){ /*右边菜单*/ function fa(){ if(mo.style.right!='0px'){ mo.style.right='0px'; mco.rcss('','cmck'); }else{ mo.style.right='-100px'; mco.rcss('cmck',''); } } on(mc

  • Android拼图游戏 玩转从基础到应用手势变化

    相信大家在小的时候都玩过拼图游戏,现如今,手机普及,能在手机上玩的游戏越来越多,于是乎,重温小时候,编写这个简易拼图游戏,而且也能进一步加深Android的一些基础知识. 老规矩,先是效果图: 这里我把为了演示效果,把图片打乱的很少,在代码里可以更改. 首先,有个默认的图片,可以用来拼图,也可以选择你喜欢的图片进行拼图,拼图的过程会记录移动的步数,并且当游戏胜利的时候会弹出一个笑脸提示,游戏胜利,用了多少步数. ps:感兴趣的完全可以继续在这上面进行扩展,比如增加游戏难度的选项,可以将图片分成更

  • Python加pyGame实现的简单拼图游戏实例

    本文实例讲述了Python加pyGame实现的简单拼图游戏.分享给大家供大家参考.具体实现方法如下: import pygame, sys, random from pygame.locals import * # 一些常量 WINDOWWIDTH = 500 WINDOWHEIGHT = 500 BACKGROUNDCOLOR = (255, 255, 255) BLUE = (0, 0, 255) BLACK = (0, 0, 0) FPS = 40 VHNUMS = 3 CELLNUMS

随机推荐