[问题]如何随机改变picturebox的座标?

楼主: ljuyentintho (小刘)   2015-06-02 13:10:33
档案:https://mega.co.nz/#!ENgQyR6L!9SvbVVXTPD6OL1KKWbg9hy4Wl9NKLpGYS234Kdjc0Co
(抱歉用缩网址会被当广告讯息)
我的游戏是一个类似电流急急棒的程式
当鼠标画出的黄线不在红色区域或鼠标没有被按下时
就会跳出警告视窗
目前我希望程式的picturebox可以出现在跳出警告视窗当时鼠标的座标
也就是让玩家从失败的地方按一下
然后再继续玩
可是我没有办法随机改变picturebox的座标
有方法做得到吗?
不用picturebox也没关系
附上程式码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Painter
{
public partial class FormPainter : Form
{
int frequency = 1;
int counter = 0;
Graphics g;
Pen pen = new Pen(Color.Yellow, 3);
bool isMouseUp = false;
DateTime time_start, time_end;
public FormPainter()
{
InitializeComponent();
labelFREQUENCY.Text = frequency.ToString();
timer1.Interval = 1000; // 设定每秒触发一次
g = this.CreateGraphics();
}
private void timer1_Tick(object sender, EventArgs e)
{
//counter++;
}
static Color GetPixelColor(Point position)
{
using (var bitmap = new Bitmap(1, 1))
{
using (var graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(position, new Point(0, 0), new
Size(1, 1));
}
return bitmap.GetPixel(0, 0);
}
}
bool isMouseDown = false;
//bool isMouseClick = true;
private void FormPainter_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
isMouseUp = true;
stop_Game();
timer1.Enabled = false;
}
// this is where game start
private void FormPainter_MouseDown(object sender, MouseEventArgs e)
{
time_start = DateTime.Now;
isMouseDown = true;
isMouseUp = false;
counter = 0;
timer1.Enabled = true;
}
List<Point> points = new List<Point>();
private void FormPainter_MouseMove(object sender, MouseEventArgs e)
{
Point p = new Point(e.X, e.Y);
if (isMouseDown && points.Count > 0)
{
Point last = points[points.Count - 1];
g.DrawLine(pen, last, p);
}
points.Add(p);
int x_c = e.X;
int y_c = e.Y;
labelCOORDINATE.Text = string.Format("X: {0}, Y: {1}", e.X, e.Y);
GetImagePixel((Bitmap)BackgroundImage, x_c, y_c);
if ((x_c >= 515 && x_c <= 675) && (y_c >= 487 && y_c <= 563) &&
timer1.Enabled)
{
time_end = DateTime.Now; // 取得游戏结束的时间
//后面的时间减前面的时间后 转型成TimeSpan即可印出时间差
timer1.Enabled = false;
MessageBox.Show("Congratulation!");
//points.Clear(); // 清空 鼠标轨迹点
//this.Invalidate(); // 必须更新画面
isMouseDown = false;
label1.Text = ((TimeSpan)(time_end -
time_start)).TotalMilliseconds.ToString();
//Close();
}
if ((x_c >= 40 && x_c <= 45) && (y_c >= 467 && y_c <= 487))
{
//points.Clear(); // 清空 鼠标轨迹点
//this.Invalidate(); // 必须更新画面
timer1.Enabled = true;
}
}
private void stop_Game()
{
time_end = DateTime.Now; // 取得游戏结束的时间
//后面的时间减前面的时间后 转型成TimeSpan即可印出时间差
label1.Text = ((TimeSpan)(time_end -
time_start)).TotalMilliseconds.ToString();
Console.WriteLine(label1.Text);
labelFREQUENCY.Text = frequency.ToString();
//buttonSTART.Visible = true;
label1.Text = "";
points.Clear(); // 清空 鼠标轨迹点
this.Invalidate(); // 必须更新画面
timer1.Enabled = false;
DialogResult myResult = MessageBox.Show
("您要再玩一次吗?", "触控笔不在黑色路径上",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
//MessageBoxButtons和 MessageBoxIcon这个里面有很多列举,可自己选自
己要的
if (myResult == DialogResult.Yes)
{
counter = 0;
frequency++;
points.Clear(); // 清空 鼠标轨迹点
this.Invalidate(); // 必须更新画面
isMouseDown = false;
}
else if (myResult == DialogResult.No)
{
label1.Text = ((TimeSpan)(time_end -
time_start)).TotalMilliseconds.ToString();
isMouseDown = false;
}
}
private void FormPainter_Load(object sender, EventArgs e)
{
}
public void GetImagePixel(Bitmap theImageBitmap, int x, int y)
{
Bitmap bmp = new Bitmap(theImageBitmap);
Color pixel;
try
{
pixel = bmp.GetPixel(x, y);
Console.WriteLine(pixel);
labelCOLOR.BackColor = pixel;
if (pixel.G >100 && timer1.Enabled==true)
{
stop_Game();
timer1.Enabled = false;
}
}
catch (Exception e)
{ }
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
pictureBox1.Visible = false;
}
}
}
谢谢耐心的版友

Links booklink

Contact Us: admin [ a t ] ucptt.com