C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 画像を周回するプログラムですが(>_<)


(過去ログ 21 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■9204 / inTopicNo.1)  画像を周回するプログラムですが(>_<)
  
□投稿者/ ken (6回)-(2007/10/21(Sun) 19:59:06)

分類:[C#] 


画像を(23,12)の位置から右ー下ー左ー上とぐるぐる回り続けるプログラムを作ってみましたが、
timerコントロールを4つも使うなど、自分でもえらく無駄の多い、冗長なプログラムのように思います。

しかし、こうしなけらばどうにもこの動きを作り出すことができませんでした。
どうか効率的なプログラムの組み方をご指導ください。


namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = imageList1.Images[0];

}

private void timer1_Tick(object sender, EventArgs e)
{
if (pictureBox1.Left > 10)
{
pictureBox1.Image = imageList1.Images[0];
pictureBox1.Left += 10;
if (pictureBox1.Left > 300)
{
timer1.Enabled = false;
timer2.Enabled = true;


}
}
}


private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;

}



private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
timer2.Enabled = false;
timer3.Enabled = false;
timer4.Enabled = false;

pictureBox1.Left = 23;
pictureBox1.Top = 12;

}

private void timer2_Tick(object sender, EventArgs e)
{

if (pictureBox1.Left > 300)
{
pictureBox1.Image = imageList1.Images[0];
pictureBox1.Top += 10;
if (pictureBox1.Top > 300)
{
timer2.Enabled = false;
timer3.Enabled = true;


}
}
}


private void timer3_Tick(object sender, EventArgs e)
{
if (pictureBox1.Top > 300)
{
timer2.Enabled = false;
pictureBox1.Image = imageList1.Images[0];
pictureBox1.Left -= 10;
if (pictureBox1.Left < 20)
{
timer3.Enabled = false;
timer4.Enabled = true;

}
}
}

private void timer4_Tick(object sender, EventArgs e)
{
if (pictureBox1.Left < 20)
{
pictureBox1.Image = imageList1.Images[0];
pictureBox1.Top -= 10;
if (pictureBox1.Top < 12)
{
pictureBox1.Image = imageList1.Images[0];
pictureBox1.Left += 10;
timer4.Enabled = false;
timer1.Enabled = true;

}
}
}
}
}
引用返信 編集キー/
■9205 / inTopicNo.2)  Re[1]: 画像を周回するプログラムですが(>_<)
□投稿者/ επιστημη (610回)-(2007/10/21(Sun) 21:42:30)
επιστημη さんの Web サイト
("進行方向"と"角を曲がる条件")を4つ、そしてタイマーがひとつあればいいんじゃね?

struct record {
  int dx, dy; // 進行方向
  delegate bool needsChangeDirection(int x, int y);
  needChangeDirection judge; // 方向転換判定関数
}; 

record[] rec = new record[4];
record[0].dx = .....
int n = 0;
int x = ...; int y = ...; // 初期値

// タイムアウトしたら
private void onTimer() {
  x += rec[n].dx; y += rec[n].dy;
  x,y の位置に絵を描く
  if ( rec[n].judge(x,y) ) { // 曲がんなきゃならなくなったら
    n = (n+1)%4;
  }
}
  

引用返信 編集キー/
■9232 / inTopicNo.3)  Re[2]: 画像を周回するプログラムですが(>_<)
□投稿者/ ken (7回)-(2007/10/22(Mon) 14:51:36)
No9205 (επιστημη さん) に返信
> ("進行方向"と"角を曲がる条件")を4つ、そしてタイマーがひとつあればいいんじゃね?
>
> struct record {
> int dx, dy; // 進行方向
> delegate bool needsChangeDirection(int x, int y);
> needChangeDirection judge; // 方向転換判定関数
> };
>
> record[] rec = new record[4];
> record[0].dx = .....
> int n = 0;
> int x = ...; int y = ...; // 初期値
>
> // タイムアウトしたら
> private void onTimer() {
> x += rec[n].dx; y += rec[n].dy;
> x,y の位置に絵を描く
> if ( rec[n].judge(x,y) ) { // 曲がんなきゃならなくなったら
> n = (n+1)%4;
> }
> }
ありがとうございます。ちなみにこれはC++で書かれたものではないでしょうか?

引用返信 編集キー/
■9234 / inTopicNo.4)  Re[3]: 画像を周回するプログラムですが(>_<)
□投稿者/ επιστημη (611回)-(2007/10/22(Mon) 15:18:47)
επιστημη さんの Web サイト
> ありがとうございます。ちなみにこれはC++で書かれたものではないでしょうか?

何で書かれていようがキモは同じっしょ。

引用返信 編集キー/
■9236 / inTopicNo.5)  Re[4]: 画像を周回するプログラムですが(>_<)
□投稿者/ ken (8回)-(2007/10/22(Mon) 15:28:32)
No9234 (επιστημη さん) に返信
> 何で書かれていようがキモは同じっしょ。
すみません。ゲームの作り方を一から勉強し直してきたいと思います。貴重な時間をさいてアドバイスいただき感謝しております。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -