C#一个图标随机出现在几个不同的位置,随机移动,点击图标则显示图标的另一种形态,并加上音效和背景音乐小猴子随机出现在某个位置; (2) 在一个给定的时间内,玩家可以用鼠标左键来点击该猴子,若击中,则该小猴子立即“变脸”; (3) 在给定时间结束时,若玩家还没有击中,该小猴子就会逃走,随机出现在另外的位置……; (4) 利用菜单开始游戏、设置猴子数量和时间间隔。 (5) 给游戏添加背景音乐和音效。
时间: 2024-03-16 08:45:14 浏览: 106
这个问题需要分几个步骤来实现,具体步骤如下:
1. 随机图标出现的位置
使用 C# 的 Random 类生成随机数来确定图标出现的位置,可以使用 System.Windows.Forms.Control 类的 Location 属性来设置图标的位置,示例代码如下:
```csharp
Random rand = new Random();
int x = rand.Next(this.ClientSize.Width - monkey.Width);
int y = rand.Next(this.ClientSize.Height - monkey.Height);
monkey.Location = new Point(x, y);
```
其中 `this.ClientSize` 表示当前窗口的客户区大小,`monkey` 是一个 PictureBox 控件,表示小猴子。
2. 随机移动图标
使用 Timer 控件来定时移动图标,可以在 Tick 事件中随机改变图标的位置,示例代码如下:
```csharp
private void timer_Tick(object sender, EventArgs e)
{
Random rand = new Random();
int x = rand.Next(this.ClientSize.Width - monkey.Width);
int y = rand.Next(this.ClientSize.Height - monkey.Height);
monkey.Location = new Point(x, y);
}
```
3. 点击图标显示另一种形态
使用 PictureBox 控件的 Click 事件来响应图标的点击事件,可以在事件处理程序中改变图标的 Image 属性,示例代码如下:
```csharp
private void monkey_Click(object sender, EventArgs e)
{
monkey.Image = Properties.Resources.another_monkey;
}
```
其中 `Properties.Resources.another_monkey` 表示另一种小猴子的资源文件。
4. 设置猴子数量和时间间隔
可以使用菜单控件来实现设置猴子数量和时间间隔,示例代码如下:
```csharp
private void monkeyNumberToolStripMenuItem_Click(object sender, EventArgs e)
{
// 弹出对话框,获取用户输入的猴子数量
int number = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("请输入小猴子的数量:", "设置猴子数量", "10", -1, -1));
// 根据猴子数量创建对应数量的 PictureBox 控件
for (int i = 0; i < number; i++)
{
PictureBox monkey = new PictureBox();
monkey.Image = Properties.Resources.monkey;
monkey.Size = monkey.Image.Size;
monkey.Click += monkey_Click;
this.Controls.Add(monkey);
}
}
private void timeIntervalToolStripMenuItem_Click(object sender, EventArgs e)
{
// 弹出对话框,获取用户输入的时间间隔
int interval = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("请输入小猴子的时间间隔(秒):", "设置时间间隔", "5", -1, -1));
// 设置 Timer 的间隔为用户输入的秒数
timer.Interval = interval * 1000;
}
```
5. 开始游戏和逃跑机制
可以使用菜单控件来实现开始游戏和逃跑机制,示例代码如下:
```csharp
private void startToolStripMenuItem_Click(object sender, EventArgs e)
{
// 启动 Timer,开始游戏
timer.Start();
}
private void timer_Tick(object sender, EventArgs e)
{
Random rand = new Random();
// 遍历所有小猴子,随机改变它们的位置
foreach (Control control in this.Controls)
{
if (control is PictureBox && control.Image == Properties.Resources.monkey)
{
int x = rand.Next(this.ClientSize.Width - control.Width);
int y = rand.Next(this.ClientSize.Height - control.Height);
control.Location = new Point(x, y);
}
}
// 逃跑机制,用户未在规定时间内点击小猴子,小猴子就会逃走
if (timeLeft > 0)
{
timeLeft--;
timeLabel.Text = "剩余时间:" + timeLeft + "秒";
}
else
{
// 遍历所有小猴子,将它们的 Image 属性设置为逃跑后的形态
foreach (Control control in this.Controls)
{
if (control is PictureBox && control.Image == Properties.Resources.monkey)
{
control.Image = Properties.Resources.escape_monkey;
}
}
timer.Stop();
MessageBox.Show("时间到啦!小猴子都跑啦!");
}
}
```
6. 添加背景音乐和音效
使用 System.Media.SoundPlayer 类来播放背景音乐和音效,可以在相应的事件处理程序中调用 Play 方法来播放音乐,示例代码如下:
```csharp
SoundPlayer player = new SoundPlayer(Properties.Resources.background_music);
player.PlayLooping();
```
其中 `Properties.Resources.background_music` 表示背景音乐的资源文件。
完整的代码如下:
```csharp
public partial class Form1 : Form
{
private Timer timer;
private int timeLeft = 30; // 游戏时间为30秒
public Form1()
{
InitializeComponent();
// 根据默认猴子数量创建对应数量的 PictureBox 控件
for (int i = 0; i < 10; i++)
{
PictureBox monkey = new PictureBox();
monkey.Image = Properties.Resources.monkey;
monkey.Size = monkey.Image.Size;
monkey.Click += monkey_Click;
this.Controls.Add(monkey);
}
timer = new Timer();
timer.Interval = 5000; // 时间间隔默认为5秒
timer.Tick += timer_Tick;
// 播放背景音乐
SoundPlayer player = new SoundPlayer(Properties.Resources.background_music);
player.PlayLooping();
}
private void monkey_Click(object sender, EventArgs e)
{
PictureBox monkey = (PictureBox)sender;
monkey.Image = Properties.Resources.another_monkey;
// 播放音效
SoundPlayer player = new SoundPlayer(Properties.Resources.sound_effect);
player.Play();
}
private void startToolStripMenuItem_Click(object sender, EventArgs e)
{
// 启动 Timer,开始游戏
timeLeft = 30;
timeLabel.Text = "剩余时间:" + timeLeft + "秒";
timer.Start();
}
private void monkeyNumberToolStripMenuItem_Click(object sender, EventArgs e)
{
// 弹出对话框,获取用户输入的猴子数量
int number = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("请输入小猴子的数量:", "设置猴子数量", "10", -1, -1));
// 移除所有已有的小猴子
foreach (Control control in this.Controls)
{
if (control is PictureBox && control.Image == Properties.Resources.monkey)
{
this.Controls.Remove(control);
}
}
// 根据猴子数量创建对应数量的 PictureBox 控件
for (int i = 0; i < number; i++)
{
PictureBox monkey = new PictureBox();
monkey.Image = Properties.Resources.monkey;
monkey.Size = monkey.Image.Size;
monkey.Click += monkey_Click;
this.Controls.Add(monkey);
}
}
private void timeIntervalToolStripMenuItem_Click(object sender, EventArgs e)
{
// 弹出对话框,获取用户输入的时间间隔
int interval = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("请输入小猴子的时间间隔(秒):", "设置时间间隔", "5", -1, -1));
// 设置 Timer 的间隔为用户输入的秒数
timer.Interval = interval * 1000;
}
private void timer_Tick(object sender, EventArgs e)
{
Random rand = new Random();
// 遍历所有小猴子,随机改变它们的位置
foreach (Control control in this.Controls)
{
if (control is PictureBox && control.Image == Properties.Resources.monkey)
{
int x = rand.Next(this.ClientSize.Width - control.Width);
int y = rand.Next(this.ClientSize.Height - control.Height);
control.Location = new Point(x, y);
}
}
// 逃跑机制,用户未在规定时间内点击小猴子,小猴子就会逃走
if (timeLeft > 0)
{
timeLeft--;
timeLabel.Text = "剩余时间:" + timeLeft + "秒";
}
else
{
// 遍历所有小猴子,将它们的 Image 属性设置为逃跑后的形态
foreach (Control control in this.Controls)
{
if (control is PictureBox && control.Image == Properties.Resources.monkey)
{
control.Image = Properties.Resources.escape_monkey;
}
}
timer.Stop();
MessageBox.Show("时间到啦!小猴子都跑啦!");
}
}
}
```
其中 `Properties.Resources.escape_monkey` 表示小猴子逃跑后的形态的资源文件。
阅读全文