C#记忆游戏的简单实现

三国无双做背景,三国杀的将牌当卡牌。

先看看效果:

C#记忆游戏的简单实现_第1张图片

游戏胜利:

C#记忆游戏的简单实现_第2张图片

游戏失败:

C#记忆游戏的简单实现_第3张图片

更换背景(钟会真帅,这个武将攻击很酷~):

C#记忆游戏的简单实现_第4张图片

游戏设置:

C#记忆游戏的简单实现_第5张图片

来说一下实现的基本方法:

(1)12个picturebox,用随机函数随机选取6个图片,后6个根据前六个进行随机,然后用数组保存索引。

这个最有看点的是保证随机数不重复的算法,我用的第三种。

方法一:
//存放1-100个数
int[] num = new int[100];
//indexNum[0]=1;…indexNum[99]=100;(不重复)
for (int i = 0; i < num.Length; i++)
{
    num[i] = i + 1;
}
Random r = new Random();
//存放最终结果
int[] result = new int[100];
int max = 100;//设置随机数最大值
for (int j = 0; j < result.Length; j++)
{
//计算出随机产生的数组索引(0-99) 注:上界值:100 无法取到
    int index = r.Next(0, max);
//取出该索引位置所存的数
    result[j] = num[index];
//用最后一个数替换掉已被放入result中的数
//这样num数组中从0到max-1又都是未被存放入result而且不重复的数了
    num[index] = num[max - 1];
//随机产生的数组索引最大值减一
    max--;
}
//打印结果
for (int i = 0; i < 100; i++)
{
    if (i % 10 == 0)
    {
        Console.WriteLine("/r/n");
    }
    Console.Write(result[i] + " ");
}
Console.Read();

方法二:

Dictionary result = new Dictionary();
Random r = new Random((int)DateTime.Now.Ticks);
int temp;
for (int i = 0; i < 100; i++)
{
    do
    {
        temp = r.Next(1, 101);
    }
    while (result.ContainsValue(temp));

    result.Add(i, temp);
}

foreach (var item in result)
{
    if (item.Key % 10 == 0)
    {
        Console.WriteLine("/r/n");
    }
    Console.Write(item.Value + " ");
}
Console.Read();
#endregion

方法三:

int[] num = new int[100];
int temp;
Random r = new Random();
for (int i = 0; i < 100; i++)
{
    temp = r.Next(1, 101);
    num[i]=GetNumber(num, i, 1, 101, temp,r);
}

for (int i = 0; i < num.Length; i++)
{
    if (i%10==0)
    {
        Console.Write("/r/n");
    }
    Console.Write(num[i] + " ");
}
Console.Read();

///

/// 递归对比重复值
///
static int GetNumber(int[] a, int index, int minValue, int maxValue, int temp, Random r)
{
    for (int i = 0; i < index; i++)
    {
        if (a[i] == temp)
        {
            int newTemp = r.Next(minValue, maxValue);
            a[index] = newTemp;
            return GetNumber(a, index, minValue, maxValue, newTemp, r);
        }
    }
    return temp;
}



(2)用两个picturebox来保存并判断两次点击的卡牌信息,点够两次触发一次判断。


(3)用变量保存消除的对数,==6就结束游戏,显示胜利。时间用尽或错误次数达到限制就结束游戏,显示失败。

———————————————————————————————————————————————————-

其他杂七杂八的功能很好实现,不再赘述,比如音效,游戏设置什么的(用类保存)。






你可能感兴趣的:(C#记忆游戏的简单实现)