拼图游戏设计_课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2016-2017学年第一学期
《Windows程序设计》
课程设计报告
题目:拼图游戏设计
专业:
班级:
姓名:
指导教师:
成绩:
学院
二0一六年十一月十五日
目录
1.设计目的与要求 (3)
1.1设计目的 (3)
1.2设计要求 (3)
2.设计分析 (3)
2.1游戏内容说明 (3)
2.2设计环境 (3)
2.3设计流程图 (4)
2.4设计功能结构图 (4)
3.实现过程 (5)
3.1游戏开始 (5)
3.2游戏进行中 (6)
3.3游戏复位 (7)
3.4游戏完成 (9)
4.设计心得 (12)
5.参考文献 (13)
6.附录 (14)
1.设计目的与要求
1.1设计目的
通过拼图游戏设计,使我掌握Visual Studio中Windows窗体的建立及窗体中各个控件的使用,以及界面的设,从而让我进一步熟悉C#语言的编程,对编程有了进一步巩固,并提高分析和解决实际问题的能力。

同时让我熟悉软件的设计,调试的全过程。

1.2设计要求
界面要求:要求界面简洁美观,简单易用。

设计要求:
(1)用C#语言实现程序设计;
(2)利用PictureBox控件来实现图片的移动;
(3)超过200步提示重新来;
(4)良好的人机互交,程序要有注释。

2.设计分析
2.1游戏内容说明
拼图游戏一款非常经典的小游戏,因为它比较简单有趣,无论老少都比较适合。

拼图的设计对每一个C#语言设计者进行语言提高和进阶都是一个很好的锻炼机会。

在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。

在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。

一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断的移动方块,直到方块按照图片的原来的顺序排好。

2.2设计环境
本程序选择Visual Studio 2012作为开发环境。

硬件要求能运行Windows 操作系统,使用C#程序设计语言编译。

2.3设计流程图
这个流程图主要包括游戏开始、操作游戏、200步完成游戏、游戏完成四个部分,通过他们之间的联系,画出简易流程图。

图1 系统流程图
2.4设计功能结构图
这个游戏主要分为四个模块,分别是游戏开始、游戏复位、游戏结束和游戏退出。

这四个摸块的功能各不一样,游戏开始的模块就不用多介绍了,我们在这里主要说说游戏复位的模块,如果玩家对自己本次的成绩不满意,可以通过重新开始模块来重完游戏。

图2功能结构图
3.实现过程
3.1游戏开始
进入游戏的主界面,我们可以看到图形界面,然后可以点击开始,进入游戏。

在程序开头定义变量,实例化数组。

代码提示如下:
namespace 拼图游戏2
{
public partial class Form1 : Form
{
public static int aa;
public static int bb;
private System.Windows.Forms.PictureBox[,] t;
public Form1()
{
InitializeComponent();
}
//实例化数组
private void Form1_Load(object sender, EventArgs e)
{
t = new PictureBox[3, 3]{{pictureBox1 ,pictureBox2 ,pictureBox3 }, {pictureBox4 ,pictureBox5 ,pictureBox6 },
{pictureBox7 ,pictureBox8 ,pictureBox9 }
};
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
t[i, j].Enabled = false;
}
}
}
图3开始界面
3.2游戏进行中
当游戏运行的时候,桌面上会出现图上的图形界面。

有一个文本框和一个图形界面。

其中通过点击鼠标移动图片,游戏就正式开始,且此游戏是通过计算鼠标点击的次数,而不是计算时间,所以玩游戏的人可以有充分的时间考虑。

左右图片对照方便游戏的进行,左下角有显示游戏进行的步数。

部分代码提示:
switch (aa) //对图片进行随机的分割
{
case 1:
{
Clipboard.SetImage(pictureBox1.Image); pictureBox1.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox2.Image); pictureBox2.Image = pictureBox4.Image; pictureBox4.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox8.Image; pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear();
button1.Enabled = false;
break;
}
case 2:
图4游戏进行中
3.3游戏复位
如果觉得自己的成绩不够好,可以选择游戏复位重新开始。

复位时直接把右边的图相应的赋给左边,复位后效果和刚开始一样。

部分代码提示:
private void button2_Click(object sender, EventArgs e) {
pictureBox1.Image = pictureBox10.Image;
pictureBox2.Image = pictureBox12.Image; pictureBox3.Image = pictureBox15.Image; pictureBox4.Image = pictureBox13.Image; pictureBox5.Image = pictureBox14.Image; pictureBox6.Image = pictureBox16.Image; pictureBox7.Image = pictureBox17.Image; pictureBox8.Image = pictureBox18.Image; pictureBox9.Image = null;
label2.Text = "";
bb = 0;
button2.Enabled = false;
button1.Enabled = true;
for (int m = 0; m <= 2; m++)
{
for (int n = 0; n <= 2; n++)
{
t[m, n].Enabled = false;
}
图5复位界面
3.4游戏完成
当玩家在200步以内完成拼图则提示"恭喜你已经完成拼图!否则将提玩家重新来过。

部分代码提示:
privatvoid Form1_Activated(object sender, EventArgs e) {
if (pictureBox1.Image == pictureBox10.Image && pictureBox2.Image == pictureBox12.Image &&
pictureBox3.Image == pictureBox13.Image &&
pictureBox4.Image == pictureBox14.Image &&
pictureBox5.Image == pictureBox15.Image &&
pictureBox6.Image == pictureBox16.Image &&
pictureBox7.Image == pictureBox17.Image &&
pictureBox8.Image == pictureBox18.Image &&
pictureBox9.Image == null)
{
MessageBox.Show("恭喜你已经完成拼图!", "提示", MessageBoxButtons.OK,
}
图6游戏成功界面
部分代码提示:
private void label2_TextChanged(object sender, EventArgs e)
{
try
{
if (int.Parse(label2.Text) >=200)
{
MessageBox.Show("你已经超过了游戏所限定的最大步数,欢迎再来!", "注意", MessageBoxButtons.OK, rmation);
}
}
catch { }
}
private void button1_Click(object sender, EventArgs e) {
button2.Enabled = true;
pictureBox9.Image = null;
aa = aa + 1;
for (int m = 0; m <= 2; m++)
{
for (int n = 0; n <= 2; n++)
{
t[m, n].Enabled = true;
}
}
图7重新来过界面
4.设计心得
这次的课程设计,在老师和同学的帮助下,从刚开始的不知如何下手到最后看到自己的程序按自己的想法运行,心里时不时的有一种喜悦。

我基本完成系统的设计,从需求分析,总体设计,详细设计,系统测试、C#界面设计及程序逻辑代码设计、文档排版等等各个步骤,分步完成系统的各项任务,实现了系统中的拼图游戏的设计。

在这段时间里我的收获很大,我不仅熟练掌握简单高效的Windows窗口设计还知道了C#进行程序设计的技巧,掌握开发一个小型游戏的基本方法,同时学会了一些调试一个较长程序的基本方法,提高了书写程序设计开发文档的能力。

当然在设计中也认识到自己的不足,比如:在设计的过程中知道了自己很多的知识点没有掌握的很透彻,会出现知识记忆出现混乱,在编写时经常犯一些低级错误等。

同时还认识到书上和老师教的内容是有限的,要想掌握更多的知识我们必须多动脑,多思考,不断地靠自己去学习,同时我们还应向他人请教,从而了解更多自己不知道的知识。

总的来说,这一段时间的学习让我受益匪浅,在此我要感谢孜孜不倦指导我的老师。

我相信这对我将来的学习会有很大帮助.
5.参考文献
[1]王小科,吕双,梁冰.C#程序开发范例宝典.第二版[M].人民邮电出版社,2009
[2] 郑阿奇,梁敬东.C#程序设计教程[M].电子工业出版社,2005
[3] 张家祥,方凌江,张贤坤,何鑫等.C#范例解析[M].北京大学出版社,2006
[4] 孙永强等. Visual C#.NET入门与提高[M].北京:清华大学出版社, 2002
[5]B-power工作室.C#网络程序设计[M]. 北京: 中国铁道出版社, 2000
[6]《C#编程语言详解》[M].北京:电子工业出版社,2004
6.附录
全部代码如下:
using System;
using System.Collections.Generic; using ponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace 拼图游戏2
{
public partial class Form1 : Form
{
public static int aa;
public static int bb;
private System.Windows.Forms.PictureBox[,] t;
public Form1()
{
InitializeComponent();
}
//实例化数组
private void Form1_Load(object sender, EventArgs e)
{
t = new PictureBox[3, 3]{{pictureBox1 ,pictureBox2 ,pictureBox3 }, {pictureBox4 ,pictureBox5 ,pictureBox6 },
{pictureBox7 ,pictureBox8 ,pictureBox9 }
};
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
t[i, j].Enabled = false;
}
}
}
//图片的移动
private void pictureBox1_Click(object sender, EventArgs e) {
bb++;
label2.Text = bb.ToString();
if (pictureBox2.Image == null)
{
pictureBox2.Image = pictureBox1.Image;
pictureBox1.Image = null;
}
else if (pictureBox4.Image == null)
{
pictureBox4.Image = pictureBox1.Image;
pictureBox1.Image = null;
}
}
private void pictureBox2_Click(object sender, EventArgs e) { bb++;
label2.Text = bb.ToString();
if (pictureBox1.Image == null)
{
pictureBox1.Image = pictureBox2.Image;
pictureBox2.Image = null;
}
else if (pictureBox3.Image == null)
{
pictureBox3.Image = pictureBox2.Image;
pictureBox2.Image = null;
}
else if (pictureBox5.Image == null)
{
pictureBox5.Image = pictureBox2.Image;
pictureBox2.Image = null;
}
}
private void pictureBox3_Click(object sender, EventArgs e) { bb++;
label2.Text = bb.ToString();
if (pictureBox2.Image == null)
{
pictureBox2.Image = pictureBox3.Image;
pictureBox3.Image = null;
}
else if (pictureBox6.Image == null)
{
pictureBox6.Image = pictureBox3.Image;
pictureBox3.Image = null;
}
}
private void pictureBox4_Click(object sender, EventArgs e) { 11
bb++;
label2.Text = bb.ToString();
if (pictureBox1.Image == null)
{
pictureBox1.Image = pictureBox4.Image;
pictureBox4.Image = null;
}
else if (pictureBox5.Image == null)
{
pictureBox5.Image = pictureBox4.Image;
pictureBox4.Image = null;
}
else if (pictureBox7.Image == null)
{
pictureBox7.Image = pictureBox4.Image;
pictureBox4.Image = null;
}
}
private void pictureBox5_Click(object sender, EventArgs e) { bb++;
label2.Text = bb.ToString();
if (pictureBox2.Image == null)
{
pictureBox2.Image = pictureBox5.Image;
pictureBox5.Image = null;
}
else if (pictureBox4.Image == null)
{
pictureBox4.Image = pictureBox5.Image;
pictureBox5.Image = null;
}
else if (pictureBox6.Image == null)
{
pictureBox6.Image = pictureBox5.Image;
pictureBox5.Image = null;
}
else if (pictureBox8.Image == null)
{
pictureBox8.Image = pictureBox5.Image;
pictureBox5.Image = null;
}
}
private void pictureBox6_Click(object sender, EventArgs e) { bb++;
label2.Text = bb.ToString();
if (pictureBox5.Image == null)
{
pictureBox5.Image = pictureBox6.Image;
pictureBox6.Image = null;
}
else if (pictureBox3.Image == null)
{
pictureBox3.Image = pictureBox6.Image;
pictureBox6.Image = null;
}
else if (pictureBox9.Image == null)
{
pictureBox9.Image = pictureBox6.Image;
pictureBox6.Image = null;
}
private void pictureBox7_Click(object sender, EventArgs e) { bb++;
label2.Text = bb.ToString();
if (pictureBox4.Image == null)
{
pictureBox4.Image = pictureBox7.Image;
pictureBox7.Image = null;
}
else if (pictureBox8.Image == null)
{
pictureBox8.Image = pictureBox7.Image;
pictureBox7.Image = null;
}
}
private void pictureBox8_Click(object sender, EventArgs e) { bb++;
label2.Text = bb.ToString();
if (pictureBox5.Image == null)
{
pictureBox5.Image = pictureBox8.Image;
pictureBox8.Image = null;
}
else if (pictureBox7.Image == null)
{
pictureBox7.Image = pictureBox8.Image;
pictureBox8.Image = null;
}
else if (pictureBox9.Image == null)
pictureBox9.Image = pictureBox8.Image;
pictureBox8.Image = null;
}
}
private void pictureBox9_Click(object sender, EventArgs e)
{
bb++;
label2.Text = bb.ToString();
if (pictureBox6.Image == null)
{
pictureBox6.Image = pictureBox9.Image;
pictureBox9.Image = null;
}
else if (pictureBox8.Image == null)
{
pictureBox8.Image = pictureBox9.Image;
pictureBox9.Image = null;
}
}
//设置游戏最大步数
private void label2_TextChanged(object sender, EventArgs e)
{
try
{
if (int.Parse(label2.Text) >=200)
{
MessageBox.Show("你已经超过了游戏所限定的最大步数,欢迎再来!", "注意", MessageBoxButtons.OK, rmation);
}
}
catch { }
}
private void button1_Click(object sender, EventArgs e) {
button2.Enabled = true;
pictureBox9.Image = null;
aa = aa + 1;
for (int m = 0; m <= 2; m++)
{
for (int n = 0; n <= 2; n++)
{
t[m, n].Enabled = true;
}
}
ss:
switch (aa) //对图片进行随机的分割
{
case 1:
{
Clipboard.SetImage(pictureBox1.Image); pictureBox1.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox2.Image); pictureBox2.Image = pictureBox4.Image; pictureBox4.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox8.Image; pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear();
break;
}
case 2:
{
Clipboard.SetImage(pictureBox1.Image); pictureBox1.Image = pictureBox6.Image; pictureBox6.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox2.Image); pictureBox2.Image = pictureBox8.Image; 15
pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear();
button1.Enabled = false;
break;
}
case 3:
{
Clipboard.SetImage(pictureBox2.Image); pictureBox2.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox4.Image); pictureBox4.Image = pictureBox6.Image; pictureBox6.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox8.Image; pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear();
break;
}
case 4:
{
Clipboard.SetImage(pictureBox1.Image); pictureBox1.Image = pictureBox8.Image; pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear();
Clipboard.SetImage(pictureBox6.Image); pictureBox6.Image = pictureBox9.Image; pictureBox9.Image = Clipboard.GetImage(); Clipboard.Clear();
button1.Enabled = false;
break;
}
default:
{
aa = 1;
goto ss;
}
}
}
//对数组赋值
private void button2_Click(object sender, EventArgs e) {
pictureBox1.Image = pictureBox10.Image;
pictureBox2.Image = pictureBox12.Image;
pictureBox3.Image = pictureBox15.Image;
pictureBox4.Image = pictureBox13.Image;
pictureBox5.Image = pictureBox14.Image;
pictureBox6.Image = pictureBox16.Image;
pictureBox7.Image = pictureBox17.Image;
pictureBox8.Image = pictureBox18.Image;
pictureBox9.Image = null;
label2.Text = "";
bb = 0;
button2.Enabled = false;
button1.Enabled = true;
for (int m = 0; m <= 2; m++)
{
for (int n = 0; n <= 2; n++)
{
t[m, n].Enabled = false;
}
}
}
//对游戏完成进行判断
private void Form1_Activated(object sender, EventArgs e) {
if (pictureBox1.Image == pictureBox10.Image && pictureBox2.Image == pictureBox12.Image &&
pictureBox3.Image == pictureBox13.Image &&
pictureBox4.Image == pictureBox14.Image &&
pictureBox5.Image == pictureBox15.Image &&
pictureBox6.Image == pictureBox16.Image &&
pictureBox7.Image == pictureBox17.Image &&
pictureBox8.Image == pictureBox18.Image &&
pictureBox9.Image == null)
{
MessageBox.Show("恭喜你已经完成拼图!", "提示", MessageBoxButtons.OK, rmation);
}
}
private void button3_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void label2_Click(object sender, EventArgs e)
{
}
}
}。

相关文档
最新文档