[問題]如何隨機改變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