当前位置:文档之家› 拼图游戏C#代码

拼图游戏C#代码

声明:本游戏由14477-Ly所写,可以转载,须说明出处using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{class Program{public static int x1, y1;//定义两个数用来移动数组作为参考坐标static int[,] ss = new int[20, 20];//定义一个静态二维数组做为参考数组 static int[,] sss = new int[20, 20];//定义一个静态二维数组做为移动数组 static bool pan = false;//判断真假值用于程序跳出static int iii = 0;//用于统计步数static int[,]paixu=new int[20,20];//用来存储对应难度的排行榜static int[] tongjishuzu = { 0,0,0,0,0,0,0};//统计各难度的排行static bool yanse11 = false;//用来判断是否产生随机背景颜色static bool yanselll = false;//用来判断是否产生随机字体颜色/// <summary>/// 对数组进行排序/// </summary>/// <param name="x"></param>/// <param name="nandu"></param>public static void paixushuzu(int x,int nandu)//用直接选择排序方式对排行榜进行排序{if (x > 10)x = 10;for (int i = 1; i < x; i++)//用直接选择排序方式对排行榜进行排序{int b = 0;for (int j = 0; j <= x - i; j++){if (paixu[nandu - 3, j] >= paixu[nandu - 3, b])b = j;elsecontinue;}int h;h = paixu[nandu - 3, b];paixu[nandu - 3, b] = paixu[nandu - 3, x - i];paixu[nandu - 3, x - i] = h;}}/// <summary>/// 输出排行榜/// </summary>/// <returns></returns>public static bool shuchu(){int xxxf = 0;bool xxxxxx = false;while (true){Console.WriteLine("请选择排行榜:A.3*3 B.4*4 C.5*5 D.6*6 E.7*7 F.8*8 G.9*9 ");paochuyichang(xxxxxx);string[]jieshou = jieshoufanghuizifuchang();if ("A" == jieshou[1] || "B" == jieshou[1] || "C" == jieshou[1] || "D" == jieshou[1] || "E" == jieshou[1] || "F" == jieshou[1] || "G" == jieshou[1] || "a" == jieshou[1] || "b" == jieshou[1] || "c" == jieshou[1] || "d" == jieshou[1] || "e" == jieshou[1] || "f" == jieshou[1] || "g" == jieshou[1]){switch (jieshou[0]){case "A": xxxf = 0; break;case "B": xxxf = 1; break;case "C": xxxf = 2; break;case "D": xxxf = 3; break;case "E": xxxf = 4; break;case "F": xxxf = 5; break;case "G": xxxf = 6; break;}break;}else{Console.Clear();xxxxxx = true;continue;}}if (tongjishuzu[xxxf] == 0){Console.WriteLine("您所玩游戏次数为零,没有任何排行!");}else{Console.Clear();Console.WriteLine("{0}*{1}排行榜为:",xxxf+3,xxxf+3);int temp=tongjishuzu[xxxf];if (temp > 10){temp = 10;}for (int i = 0; i < temp; i++){Console.WriteLine("No.{0}:\t\t{1}", i + 1, paixu[xxxf, i]);}}Console.WriteLine("请按任意键返回!");ConsoleKeyInfo ch = Console.ReadKey(true);//定义一个从键盘接受字符的变量Console.Clear();return false;}/// <summary>/// 输出游戏提示玩法/// </summary>/// <returns></returns>public static bool des(){Console.Write("\t\t本游戏为数字拼图1.1版本,在w,a,s,d基础\n\t上增加方向键控制数字板移动\n\n\t界面仍然很简陋,仅有控制台,但已很接近图形界面\n\n\t其中数字为可移动板,空格为可移动位置\n\n\t按任意键返回...");ConsoleKeyInfo ch = Console.ReadKey(true);//定义一个从键盘接受字符的变量Console.Clear();return false;}/// <summary>/// 产生随机数组/// </summary>/// <param name="cd"></param>public static void cankaoshuzu(int cd)//用于产生随机数组{int[] num = new int[cd * cd];int[] newNum = new int[cd * cd];//定义一个二维数组int i, j, r = cd * cd - 1, k = 0;int n;int tmp;Random rand = new Random();for (i = 0; i < cd * cd; i++)//初始化这个数组,0~9{num[i] = i;}///这个算法只需要循环你的数范围的次数而已for (i = 0; i < cd * cd; i++){n = rand.Next(0, r);//随机产生一个0~cd*cd之间的数,r的初始值是cdnewNum[i] = num[n];//把产生的随机数当成num的下标赋给newNum数组 tmp = num[n];//然后把num[n]和它最后一个数交换(num[r]),这是避免重复num[n] = num[r];num[r] = tmp;r--;//自减,下次产生的随机数就可以从0到8了,}int x = 1;//给出顺序值参考数组值变量for (int ix = 0; ix < cd; ix++)//给出顺序值参考数组值{for (int ixx = 0; ixx < cd; ixx++){ss[ix, ixx] = x;x++;}}for (i = 0; i <= cd - 1; i++){for (j = 0; j <= cd - 1; j++){sss[i, j] = newNum[k];k = k + 1;}}}/// <summary>/// 用来输出参考数组和移动之后的数组排列/// </summary>/// <param name="cd"></param>public static void print(int cd)//用来输出参考数组和移动之后的数组排列 {for (int i = 0; i <= cd - 1; i++)//输出移动数组{for (int j = 0; j <= cd - 1; j++){if (sss[i, j] != 0){Console.Write("{0,-4}", sss[i, j]);//指定字符串宽带度,并输出。

}else{x1 = i;y1 = j;char x = ' ';Console.Write("{0,-4}", x);//指定字符串宽带度,并输出。

}}Console.Write("\t");for (int jx = 0; jx <= cd - 1; jx++)//输出参考数组数组{if (ss[i, jx] != cd * cd)Console.Write("{0,-4}", ss[i, jx]);//指定字符串宽带度,并输出。

else{char xxxxxx = ' ';Console.Write("{0,-4}", xxxxxx);}}Console.Write("\n");}}/// <summary>/// 判断指令是否正确,否则抛出异常/// </summary>/// <param name="pangduang"></param>public static void paochuyichang(bool pangduang)//用来判断输入指令错误抛出异常{if (pangduang){Console.WriteLine("您输入指令有误请重新输入:");}}/// <summary>/// 返回字符串的字符/// </summary>/// <returns></returns>public static string[] jieshoufanghuizifuchang()//从控制台接受一个按键并将其转换成字符串返回{ConsoleKeyInfo ch;//定义一个从键盘接受字符的变量ch = Console.ReadKey(true);//从键盘接受后复制给变量,加上true可以使其输入键不在控制台上显示string[] jieshouzifu = new string[2];jieshouzifu[0] = Convert.ToString(ch.Key);//将变量转为字符串jieshouzifu[1] = Convert.ToString(ch.KeyChar);return jieshouzifu;}/// <summary>/// 用来移动数组/// </summary>/// <param name="yid"></param>/// <param name="x"></param>public static void yidong(string yid, int x)//用来移动数组{switch (yid){case "W":case "UpArrow":{if (x1 < x - 1){sss[x1, y1] = sss[x1 + 1, y1]; sss[x1 + 1, y1] = 0; x1++; pan = false; iii++;}else{pan = true;}};break;case "S":case "DownArrow":{if (x1 != 0){sss[x1, y1] = sss[x1 - 1, y1]; sss[x1 - 1, y1] = 0; x1--; pan = false; iii++;}else{pan = true;}};break;case "D":case "RightArrow":{if (y1 != 0){sss[x1, y1] = sss[x1, y1 - 1]; sss[x1, y1 - 1] = 0; y1--; pan = false; iii++;}else{pan = true;}};break;case "A":case "LeftArrow":{if (y1 < x - 1){sss[x1, y1] = sss[x1, y1 + 1]; sss[x1, y1 + 1] = 0; y1++; pan = false; iii++;}else{pan = true;}};break;default: pan = true; break;//判断指令错误}}/// <summary>/// 判断数组是否相等,相等的话返回真值,不相等的话返回假/// </summary>/// <param name="cd"></param>/// <returns></returns>public static bool bijiaoxiangdeng(int cd){int blian = 1;bool x = true;for (int i = 0; i < cd; i++){for (int j = 0; j < cd; j++, blian++){if (blian == cd * cd){break;}if (sss[i, j] == blian){}else{x = false;}}}return x;}/// <summary>/// 用户选择颜色/// </summary>/// <returns></returns>public static bool yans(){bool pandzl = false, panzl11 = false;int jieb = 0, jiez = 0;string jiex;while (true){Console.WriteLine("请选择背景颜色:\n1.黑色2.蓝色3.青色4.藏蓝色5.深紫色6.深灰色7.深绿色8.深紫红色\n9.深红色10.深黄色11.灰色12.绿色13.紫红色14.红色15.白色16.黄色17.由系统随机生成颜色18.由系统动态生成颜色");if (pandzl){Console.WriteLine("您输入指令由误请重新输入!");}jiex = Console.ReadLine();if (jiex == "1" || jiex == "2" || jiex == "3" || jiex == "4" || jiex == "5" || jiex == "6" || jiex == "7" || jiex == "8" || jiex == "9" || jiex == "10" || jiex == "11" || jiex == "12" || jiex == "13" || jiex == "14" || jiex == "15" || jiex == "16" || jiex == "17" || jiex == "18"){int jiexx = int.Parse(jiex);if (1 <= jiexx && jiexx <= 16){yanseb(jiexx);//产生用户选择的颜色yanse11 = false;break;}elseif (jiexx == 17){jieb = new Random().Next(2, 16);//产生随机颜色yanseb(jieb);yanse11 = false;break;}else{yanse11 = true;//产生动态的随机系统颜色break;}}else{Console.Clear();//清空控制台pandzl = true;continue;}}while (true){Console.WriteLine("请选择字体颜色:\n1.黑色2.蓝色3.青色4.藏蓝色5.深紫色6.深灰色7.深绿色8.深紫红色\n9.深红色10.深黄色11.灰色12.绿色13.紫红色14.红色15.白色16.黄色17.由系统随机生成颜色18.由系统动态生成颜色");while (true){if (panzl11){Console.WriteLine("您输入指令由误请重新输入!");}jiex = Console.ReadLine();if (jiex == "1" || jiex == "2" || jiex == "3" || jiex == "4" || jiex == "5" || jiex == "6" || jiex == "7" || jiex == "8" || jiex == "9" || jiex == "10" || jiex == "11" || jiex == "12" || jiex == "13" || jiex == "14" || jiex == "15" || jiex == "16" || jiex == "17" || jiex == "18"){int jiexx = int.Parse(jiex);if (1 <= jiexx && jiexx <= 16){yansez(jiexx);//产生用户选择的颜色yanselll = false;break;}elseif (jiexx == 17){jiez = new Random().Next(1, 16);//产生随机颜色 yansez(jiez);yanselll = false;break;}else{yanselll = true;//产生动态的随机系统颜色break;}}else{panzl11 = true;}}break;}Console.WriteLine("按任意键返回。

相关主题