《C#程序设计》课程设计题目:拼图游戏专业:计算机科学与技术学号:姓名:指导老师:完成日期: 2012/12/26《C#课程设计》评分标准题目:拼图游戏专业:计算机科学与技术学号:姓名:目录1 前言 (4)2 需求分析 (4)2.1要求 (4)2.2任务 (4)2.3运行环境 (4)2.4开发工具 (4)3 概要设计与详细设计 (5)3.1系统流程图 (5)3.2结构功能图 (5)4 编码与实现 (6)4.1编码分析 (6)4.2具体代码实现(附源代码) (9)5 课程设计总结 (18)参考文献 (19)1.前言拼图游戏一款非常经典的小游戏,因为它比较简单有趣,无论老少都比较适合。
拼图的设计对每一个C#语言设计者进行语言提高和进阶都是一个很好的锻炼机会。
拼图游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。
在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。
因此,如何设计和开发好这个拼图游戏,对于提高C#开发水平和系统的设计能力有极大的帮助。
在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。
一个3×3的魔板,有一个格子是空的,其他格子随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断的移动方块,直到方块按照图片的原来的顺序排好。
2 需求分析2.1要求(1)用C#语言实现程序设计;(2)利用PictureBox控件来实现图片的移动(3)超过200步提示重新来(4)界面友好(良好的人机互交),程序要有注释。
2.2任务(1)制作流程图(2)编写代码;(3)程序分析与调试。
2.3运行环境(1)WINDOWS2000/XP/win7系统(2)TurboC2.0编译环境2.4开发工具C#语言3 概要设计与详细设计3.1系统流程图如图3.1图3.1系统流程图3.2功能结构图如图3.2所示。
图3.2功能结构图这个游戏主要分为四个模块,分别是游戏开始、游戏复位、游戏结束和游戏退出。
这四个摸块的功能各不一样,游戏开始的模块就不用多介绍了,我们在这里主要说说重新开始的模块,如果玩家对自己本次的成绩不满意,可以通过重新开始模块来重完游戏4 编码与实现4.1分析说明游戏开始:界面如图4-1图4-1在程序开头定义变量,实例化数组;代码如下图游戏进行中:当游戏运行的时候,桌面上会出现图上的图形界面。
有一个文本框和一个图形界面。
其过点击鼠标移动图片,游戏就正式开始,且此游戏是通过计算鼠标点击的次数,而不是计算时间,所以玩游戏的人可以有充分的时间考虑。
游戏中见图4-2图4-2左右图片对照方便有游戏的进行,左下角有显示有戏进行的步数,复位时直接把右边的图相应的赋给左边,代码实现如下图:这里从第一个到第九个PictureBox都有相应赋值和命令这里只截取Box1的图片对应的代码游戏时本段代码主要运用的c#知识是二维数组和if`~else语句,通过判断box1游戏复位:如果觉得自己的成绩不够好,可以选择复位重新开始。
复位时直接把右边的图相应的赋给左边,复位后效果和刚开始一样。
代码实现如下游戏完成:当玩家在200步以完成拼图则提示"恭喜你已经完成拼图!"如图4-3 ;否则将提玩家重新来过如图4-4图4-44.2具体代码实现附源代码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) {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();button1.Enabled = false;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;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();button1.Enabled = false;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){}}}5 课程设计总结经过一学期的C#学习,我对C#有了进一步的认识和掌握。