你是想用 C# 编写一个“QQ找茬”游戏(即找不同游戏)吗?如果是这样,我可以帮你提供一个简单的找茬游戏基础示例,包含界面设计和基本逻辑。
基本思路
- 显示两张几乎相同的图片(可以用 PictureBox 控件)
- 用户点击图片找不同的地方
- 记录用户找到的位置,判断是否正确
- 限制时间或点击次数,完成后显示得分
简单示例(WinForms)
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace QQFindDifference
{
public partial class MainForm : Form
{
// 假设两张图片大小相同
private Bitmap img1;
private Bitmap img2;
// 差异点坐标列表
private List<Point> differences = new List<Point>();
// 记录已找出的差异
private List<Point> foundDifferences = new List<Point>();
private const int CLICK_RADIUS = 20; // 点击容差范围
public MainForm()
{
InitializeComponent();
// 加载图片
img1 = new Bitmap("image1.jpg");
img2 = new Bitmap("image2.jpg");
// 这里需要预先定义图片中的差异点坐标
differences.Add(new Point(50, 80));
differences.Add(new Point(150, 120));
differences.Add(new Point(220, 200));
// 依次添加所有差异点
pictureBox1.Image = img1;
pictureBox2.Image = img2;
pictureBox1.MouseClick += PictureBox_MouseClick;
pictureBox2.MouseClick += PictureBox_MouseClick;
}
private void PictureBox_MouseClick(object sender, MouseEventArgs e)
{
Point clickPoint = e.Location;
// 判断是否点击了差异点(在容差范围内)
foreach (var diff in differences)
{
if (!foundDifferences.Contains(diff))
{
double distance = Math.Sqrt(Math.Pow(clickPoint.X - diff.X, 2) + Math.Pow(clickPoint.Y - diff.Y, 2));
if (distance <= CLICK_RADIUS)
{
foundDifferences.Add(diff);
MessageBox.Show("找到一个不同点!");
// 画圈标记(示例:在两张图片对应位置画红圈)
DrawCircle(pictureBox1, diff);
DrawCircle(pictureBox2, diff);
if (foundDifferences.Count == differences.Count)
{
MessageBox.Show("恭喜!你找到了所有不同点!");
}
break;
}
}
}
}
private void DrawCircle(PictureBox pb, Point center)
{
Bitmap bmp = new Bitmap(pb.Image);
using (Graphics g = Graphics.FromImage(bmp))
{
Pen pen = new Pen(Color.Red, 3);
g.DrawEllipse(pen, center.X - CLICK_RADIUS, center.Y - CLICK_RADIUS, CLICK_RADIUS * 2, CLICK_RADIUS * 2);
}
pb.Image = bmp;
}
}
}
注意
- 图片和差异点坐标需你自己准备(或者用程序生成差异图)
- 可以根据需求添加计时器、得分、提示等功能
- UI 部分建议用 Visual Studio 设计窗体,方便调整布局
发表回复