3月27日 数组
以下是老虎机抽奖游戏的完整C#代码实现,包含基础功能和进阶要求:
using System;
using System.Threading; // 用于添加延迟效果,增加游戏体验
class SlotMachineGame
{
static void Main()
{
// 游戏标题
Console.WriteLine("========== 水果老虎机 ==========");
Console.WriteLine("欢迎来到水果老虎机游戏!");
Console.WriteLine("规则说明:");
Console.WriteLine("1. 每次游戏消耗1分");
Console.WriteLine("2. 随机生成3个水果图案");
Console.WriteLine("3. 三个相同 → 大奖 +10分");
Console.WriteLine("4. 两个相同 → 小奖 +3分");
Console.WriteLine("5. 全不相同 → 谢谢参与 -1分");
Console.WriteLine("================================\n");
// 初始化分数
int score = 10;
bool gameRunning = true;
// 创建随机数生成器
Random random = new Random();
// 主游戏循环
while (gameRunning)
{
Console.WriteLine($"\n当前分数:{score}分");
// 检查分数是否足够
if (score <= 0)
{
Console.WriteLine("游戏结束!你的分数用完了。");
Console.WriteLine("按任意键退出...");
Console.ReadKey();
break;
}
// 询问是否继续游戏
Console.Write("\n是否开始新的一局?(y/n): ");
string choice = Console.ReadLine().ToLower();
if (choice != "y")
{
Console.WriteLine($"游戏结束!最终得分:{score}分");
break;
}
// 扣减游戏成本
score -= 1;
Console.WriteLine($"扣除1分游戏成本,剩余{score}分");
// 添加一点悬念效果
Console.WriteLine("老虎机开始旋转...");
Thread.Sleep(500); // 暂停0.5秒
// 生成三个随机数(1-5)
int num1 = random.Next(1, 6);
int num2 = random.Next(1, 6);
int num3 = random.Next(1, 6);
// 显示结果(带颜色)
Console.Write("\n结果:");
PrintColoredFruit(num1);
Console.Write(" ");
PrintColoredFruit(num2);
Console.Write(" ");
PrintColoredFruit(num3);
Console.WriteLine("\n");
// 判断中奖情况
int prize = 0;
string resultMessage = "";
if (num1 == num2 && num2 == num3)
{
// 三个相同
prize = 10;
resultMessage = "🎉 恭喜!中大奖了!三个相同!";
Console.ForegroundColor = ConsoleColor.Yellow;
}
else if (num1 == num2 || num1 == num3 || num2 == num3)
{
// 两个相同(有三种可能的组合)
prize = 3;
resultMessage = "🎊 不错哦!中了小奖!两个相同!";
Console.ForegroundColor = ConsoleColor.Cyan;
}
else
{
// 全不同
prize = -1;
resultMessage = "😅 谢谢参与!再接再厉!";
Console.ForegroundColor = ConsoleColor.Gray;
}
// 显示结果信息
Console.WriteLine(resultMessage);
// 更新分数
score += prize;
// 显示分数变动
if (prize > 0)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"+{prize}分!");
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"{prize}分");
}
// 重置颜色
Console.ResetColor();
// 显示当前总分
Console.WriteLine($"当前总分:{score}分");
// 添加统计信息(进阶功能)
if (prize == 10)
{
Console.WriteLine("★★★★★ 超级幸运! ★★★★★");
}
Thread.Sleep(1000); // 暂停1秒,让玩家看清结果
}
}
/// <summary>
/// 根据数字打印对应水果(带颜色)
/// </summary>
static void PrintColoredFruit(int num)
{
switch (num)
{
case 1:
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("🍎 苹果");
break;
case 2:
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.Write("🍊 橙子");
break;
case 3:
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("🍌 香蕉");
break;
case 4:
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("🍇 葡萄");
break;
case 5:
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.Write("7️⃣ 7");
break;
}
Console.ResetColor();
}
}
进阶版本(增加更多功能)
如果你想给能力较强的学生提供更具挑战性的版本,这里还有一个增强版:
using System;
using System.Collections.Generic;
using System.Threading;
class AdvancedSlotMachine
{
static Dictionary<int, string> fruits = new Dictionary<int, string>
{
{1, "🍎苹果"}, {2, "🍊橙子"}, {3, "🍌香蕉"}, {4, "🍇葡萄"}, {5, "7️⃣7"}
};
static Dictionary<string, double> odds = new Dictionary<string, double>
{
{"三个相同", 10.0}, {"两个相同", 3.0}, {"全不同", -1.0}
};
static void Main()
{
Console.WriteLine("========== 高级水果老虎机 ==========");
Console.WriteLine("规则:");
Console.WriteLine("• 初始分数:10分");
Console.WriteLine("• 每次下注:1-3分(可自定义)");
Console.WriteLine("• 大奖x10倍,小奖x3倍,不中扣1倍");
Console.WriteLine("=====================================\n");
int score = 10;
Random random = new Random();
Dictionary<string, int> statistics = new Dictionary<string, int>
{
{"大奖", 0}, {"小奖", 0}, {"不中", 0}
};
while (score > 0)
{
Console.WriteLine($"\n当前分数:{score}分");
Console.Write("请输入下注分数(1-3分,或0退出):");
if (!int.TryParse(Console.ReadLine(), out int bet) || bet < 0 || bet > 3)
{
Console.WriteLine("输入无效,请输入1-3之间的数字!");
continue;
}
if (bet == 0) break;
if (bet > score)
{
Console.WriteLine("分数不足!");
continue;
}
// 扣分
score -= bet;
// 老虎机动画效果
Console.Write("\n旋转中");
for (int i = 0; i < 3; i++)
{
Thread.Sleep(300);
Console.Write(".");
}
Console.WriteLine();
// 生成结果
int[] results = new int[3];
for (int i = 0; i < 3; i++)
{
results[i] = random.Next(1, 6);
}
// 显示结果
Console.Write("\n结果:");
foreach (int r in results)
{
SetColorByFruit(r);
Console.Write(fruits[r] + " ");
}
Console.ResetColor();
Console.WriteLine("\n");
// 判断中奖
int prize = 0;
string resultType = "";
if (results[0] == results[1] && results[1] == results[2])
{
prize = bet * 10;
resultType = "大奖";
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"🎉 恭喜!中大奖了!赢得{prize}分!");
}
else if (results[0] == results[1] || results[0] == results[2] || results[1] == results[2])
{
prize = bet * 3;
resultType = "小奖";
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine($"🎊 不错哦!中小奖了!赢得{prize}分!");
}
else
{
prize = -bet;
resultType = "不中";
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine($"😅 没中!损失{bet}分");
}
// 更新分数
score += prize;
statistics[resultType]++;
// 显示统计信息
Console.ResetColor();
Console.WriteLine($"\n--- 游戏统计 ---");
Console.WriteLine($"大奖:{statistics["大奖"]}次 | 小奖:{statistics["小奖"]}次 | 未中:{statistics["不中"]}次");
Console.WriteLine($"中奖率:{((statistics["大奖"] + statistics["小奖"]) * 100.0 / (statistics["大奖"] + statistics["小奖"] + statistics["不中"])):F1}%");
}
Console.WriteLine($"\n游戏结束!最终得分:{score}分");
Console.WriteLine("按任意键退出...");
Console.ReadKey();
}
static void SetColorByFruit(int num)
{
switch (num)
{
case 1: Console.ForegroundColor = ConsoleColor.Red; break;
case 2: Console.ForegroundColor = ConsoleColor.DarkYellow; break;
case 3: Console.ForegroundColor = ConsoleColor.Yellow; break;
case 4: Console.ForegroundColor = ConsoleColor.Magenta; break;
case 5: Console.ForegroundColor = ConsoleColor.DarkGray; break;
}
}
}
教学要点
在讲解这个代码时,可以重点强调以下知识点:
- Random类的使用:
random.Next(1, 6)生成1-5的随机数 - 数组/集合:存储随机生成的结果
- 条件判断:判断三个数是否相等
- 循环:
while循环控制游戏流程 - 方法封装:将打印水果的功能封装成方法
- 用户输入验证:检查输入是否有效
- 控制台美化:使用
Console.ForegroundColor和Thread.Sleep增加游戏体验
趣味扩展建议:让学生自己添加新功能,比如特殊组合奖励(3个7给超级大奖)、音效、保存最高分等。