スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

県内Aマッチ(韓国居酒屋 シュリCUP)

2009年10月25日に行いました県内Aマッチの試合後の監督代行のコメントです。
<試合のコメント>
韓国居酒屋 シュリCUPに参戦しました。
総合成績は8チーム中4位とまずまずの好成績。
超人的に上手な人達が居る中でも楽しめたと思います。
初のリサナロッソでの大会だったのですが、審判はしっかりしてるし、
主催側も人当たりが良い人が多かったので気持ちよく出来た。
ワサダよりこっちの方がピッチがいいし練習で慣れてるから今後もこちらに参加しよう。

<チームへのコメント>
えいすけ
ゴール前の粘りやポストのくさびとなるプレイが練習通り出来てた。前線の粘りもかなり開花してきている。得点シーンはナイス!と思える点でした。
⇒トラップ、パスの基礎練習

よしお
ドリブル、カット、シュートと試合で本領発揮されてました。ヘディングシュートは皆のやれるぞ!って気持ちを奮い立たせました。全体のMVPに選出されてチームのエースとしてハクがついた。
⇒体力、中盤のボール運び

ごっちゃん
試合によって最前線、最後列と柔軟なプレイができるようになった。ゴール・トラップ精度がかなり上がったがロングパスの精度が悪いのでパスミスが目立った。
⇒パス練習の基礎練習

タイシ
全体が見えてパス、シュートと司令塔的な役目を果たした。シュート精度が落ち着かないので練習が必要。ケガしやすいので間接が柔軟になるとなおよし。
⇒シュート練習

みうらん
相手キーパーの視線を見ながら貪欲にゴールを狙う姿は見てて気持ちいい。行けるなら自分で行く!ってプレイに変わりつつある。惜しくも外れたが強烈ミドルは中盤としての大きな武器となる。
⇒ミドルシュート練習

中井王
落ち着いて中盤にいるときの中井王は素晴らしいパス精度で全体を活かしている。最前列の場合は動きが鈍いせいか突破がワンパターンでシュートまでの時間が長い。
⇒コンパクト体制のシュートの練習をしよう。

ツトム
キーパーに関しては言う事なし。
⇒今度いたストをやろう。

マサキ
抜群の守備、落ち着いたフィードアップでチームを影で支える。
ゴール精度は悪いが、ゴールに貪欲になりすぎると守備がガタガタになるので今はまだ攻撃はミドルくらいに抑えて欲しい。
⇒ふかさないミドルシュートの練習



成績についてはこちらを参照。
フットサルクラブ グレゴリオ鬼骨 | 成績

スポンサーサイト

テーマ : フットサル
ジャンル : スポーツ

210の剣~応用情報処理試験

どーも。

このまえ応用情報処理試験を受けてきました。


ほぼ勉強をしてなかったのですが、あてずっぽうに書いたものが脅威の的中率。

午前は、41/80の正答率でした。後、7問正解していたら午前合格だったのです。

午後は、解答がまだ出てないので、わかりませんが、こりゃ、春には受かるわ!
なんつーことを思ってます。

フットサルソフトのほうは、バグとりに加えて、C#らしく、効率的で、拡張しやすいコードに書き直しをやってます。これが、勉強になるよ。忙しいとじっくり見れないからね。

二一十の剣~プロトできました

フットサルソフトのプロトタイプができました

興味のある人は、使ってみてください。
そして、感想や、意見、追加してほしい機能などを教えてほしいです。
使ってみたいけど、わからない人は、僕に連絡ください。


以下のヤフーメールにおいてます。
ID:superfootsal@yahoo.co.jp
パスワード:superxxxx
※xxxxは僕の誕生日
例:一月一日なら,0101

ソフト実行までの手順書:
1.添付ファイルのRelease.zipをダウンロードして、解凍して下さい。
2.解凍してRelease/bin/SFS_PROTO.exeを実行して下さい。

ソフトの使用方法:
1.まず、初期配置ボタンを押して初期配置モードにして下さい。
2.画面上のアイコンをドラッグで、好きな場所に動かせます。左クリックを離すと場所が確定します。
3.好きな位置にアイコンを置いたら、次へボタンを押してください。位置を記憶します。
4.自動的にターン1モードになるので、アイコンをドラッグしてください。矢印が伸びて次に移動したい場所を設定できます。
5.好きな移動位置を決定したら、また、次へボタンを押して、設定を保存しつつ、次のターンにいきます。
6.ターン1の設定を動かしてみたい場合は、ターン1ボタンを押した後に、再生ボタンを押してください。アイコンが設定どおりに動きます。

画像イメージ:



続きを読む »

【広報】ホームページ更新のお知らせ

ゴール、アシストの前年比を算出したPDFファイルをホームページのチームから見られるようにしてます。

エクセルがサーバに置けないようなのでエクセルファイル(またはOpenOffice形式)がほしいメンバーはあげます。

あと、メンバーのヤンマが難関の試験に見事合格しました!!!!!!!!!!!!!!!!!!!!!!

おめでとー!!!!!!!!!!!!!!!!!!!!!!!!!

二一十の剣~開発記3

こんばんわ。

今日もプログラムの話です。

前回の課題をいくつか解決した

前回の課題:
・プレイヤーとボールをクリックした際の判定の仕様
・ターンの仕組みの仕様
・設定モードの仕組みの仕様
→初期配置と1~5までのターンのみ設定できるようにする。
それぞれの設定に移行するためのボタンを設置する。
各設定は、プレイヤークラスとボールクラスを作成し、その中のメンバとして保存する。
画像クリックの判定は、画像の座標と画像のサイズをクラスに組み込むことで解決。
左クリックを押下時に、現在座標と比べての判定を行う。

実績:
・プレイヤークラスとボールクラスの作成を行った。
・ターンを設定するためのボタンを作成した。
・画像をクリックした時に、画像の切り替えができるようにした。
・再生ボタンを設置し、ボタンを押すイベントに、timer.Start()メソッドを移動し、任意のタイミングでアニメーションがスタートできるようにした。
・停止ボタンを設置し、ボタンを押すイベントに、timer.Stop()メソッドを設置し、任意のタイミングでアニメーションが停止できるようにした。

課題:
・初期配置モードの作成
→画像をドラッグで、移動できるようにする。また、情報を保存できるようにする。
・ターン1~5モードの作成
→画像をクリックすると、移動可能範囲を視覚的に表示できるようにする。また、ドラッグで移動後の場所を設定できるようにする。

行き当たりばったりでやってるせいか、仕様にブレがでることが多いが、プロトタイプを繰り返し作成する開発手法ということで、ご勘弁を。

しかし、C#の開発効率の良さは、C++と比較にならない。
winAPIよりも断然楽だ。


ソース:
mainFormクラス
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SFS_PROTO
{
public partial class mainForm : Form
{
//タイマー
public Timer timer;

//現在のモードを示す(0:初期位置 1:1ターン目 2:2ターン目 3:3ターン目 ・・・)
private int mode = 0;

//画像読込み用
private Image imgField;
private Bitmap imgAlly1;
private Bitmap imgAlly2;
private Bitmap imgAlly3;
private Bitmap imgAlly4;
private Bitmap imgAlly5;
private Bitmap imgEnemy1;
private Bitmap imgEnemy2;
private Bitmap imgEnemy3;
private Bitmap imgEnemy4;
private Bitmap imgEnemy5;
private Bitmap imgBall;
private Bitmap img_onAlly1;
private Bitmap img_onAlly2;
private Bitmap img_onAlly3;
private Bitmap img_onAlly4;
private Bitmap img_onAlly5;
private Bitmap img_onEnemy1;
private Bitmap img_onEnemy2;
private Bitmap img_onEnemy3;
private Bitmap img_onEnemy4;
private Bitmap img_onEnemy5;
private Bitmap img_onBall;

//プレイヤーとボール
private Player ally1;
private Player ally2;
private Player ally3;
private Player ally4;
private Player ally5;
private Player enemy1;
private Player enemy2;
private Player enemy3;
private Player enemy4;
private Player enemy5;
private Ball ball;


//再描画イベント
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

// コートの画像(test.bmp)の読み込みと表示
e.Graphics.DrawImage(imgField, 0, 0, 600, 300);
e.Graphics.DrawImage(ally1.work_image, ally1.work_x, ally1.work_y, ally1.width, ally1.height);
e.Graphics.DrawImage(ally2.work_image, ally2.work_x, ally2.work_y, ally2.width, ally2.height);
e.Graphics.DrawImage(ally3.work_image, ally3.work_x, ally3.work_y, ally3.width, ally3.height);
e.Graphics.DrawImage(ally4.work_image, ally4.work_x, ally4.work_y, ally4.width, ally4.height);
e.Graphics.DrawImage(ally5.work_image, ally5.work_x, ally5.work_y, ally5.width, ally5.height);
e.Graphics.DrawImage(enemy1.work_image, enemy1.work_x, enemy1.work_y, enemy1.width, enemy1.height);
e.Graphics.DrawImage(enemy2.work_image, enemy2.work_x, enemy2.work_y, enemy2.width, enemy2.height);
e.Graphics.DrawImage(enemy3.work_image, enemy3.work_x, enemy3.work_y, enemy3.width, enemy3.height);
e.Graphics.DrawImage(enemy4.work_image, enemy4.work_x, enemy4.work_y, enemy4.width, enemy4.height);
e.Graphics.DrawImage(enemy5.work_image, enemy5.work_x, enemy5.work_y, enemy5.width, enemy5.height);
e.Graphics.DrawImage(ball.work_image, ball.work_x, ball.work_y, ball.width, ball.height);

}

// マウスのボタンを押す
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);

switch (e.Button)
{
// 左クリック
case MouseButtons.Left:
//クリック座標が、アイコン上かどうかを判断
ally1.isOnIcon(e.X,e.Y);
ally2.isOnIcon(e.X, e.Y);
ally3.isOnIcon(e.X, e.Y);
ally4.isOnIcon(e.X, e.Y);
ally5.isOnIcon(e.X, e.Y);
enemy1.isOnIcon(e.X,e.Y);
enemy2.isOnIcon(e.X, e.Y);
enemy3.isOnIcon(e.X, e.Y);
enemy4.isOnIcon(e.X, e.Y);
enemy5.isOnIcon(e.X, e.Y);
ball.isOnIcon(e.X,e.Y);

//再描画
Invalidate();
break;
// 右クリック
case MouseButtons.Right:

break;
// 上記以外をクリック
default:

break;
}

}

// マウスのボタンを離す
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
}

// マウスを動かす
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
}

// タイマーのインターバルごとに呼び出されるTickメソッド
private void timer_TICK(object sender, EventArgs e)
{
//アニメーションロジック
ally1.work_x++;
ally1.work_y++;


// 再描画実行
Invalidate();

}

//コンストラクタ
public mainForm()
{
InitializeComponent();
// 画面のちらつきを抑えるため、以下の設定を追加
SetStyle(
ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);


//全ての画像をメモリに読み込んで置く
//フィールド
if (imgField == null) imgField = Image.FromFile("Field.bmp");
//プレイヤー::アイコンを読み込み、背景の黒を透明色として設定
if (imgAlly1 == null) imgAlly1 = new Bitmap("ally1.bmp");
imgAlly1.MakeTransparent(Color.Black);
if (imgAlly2 == null) imgAlly2 = new Bitmap("ally2.bmp");
imgAlly2.MakeTransparent(Color.Black);
if (imgAlly3 == null) imgAlly3 = new Bitmap("ally3.bmp");
imgAlly3.MakeTransparent(Color.Black);
if (imgAlly4 == null) imgAlly4 = new Bitmap("ally4.bmp");
imgAlly4.MakeTransparent(Color.Black);
if (imgAlly5 == null) imgAlly5 = new Bitmap("ally5.bmp");
imgAlly5.MakeTransparent(Color.Black);
if (imgEnemy1 == null) imgEnemy1 = new Bitmap("enemy1.bmp");
imgEnemy1.MakeTransparent(Color.Black);
if (imgEnemy2 == null) imgEnemy2 = new Bitmap("enemy2.bmp");
imgEnemy2.MakeTransparent(Color.Black);
if (imgEnemy3 == null) imgEnemy3 = new Bitmap("enemy3.bmp");
imgEnemy3.MakeTransparent(Color.Black);
if (imgEnemy4 == null) imgEnemy4 = new Bitmap("enemy4.bmp");
imgEnemy4.MakeTransparent(Color.Black);
if (imgEnemy5 == null) imgEnemy5 = new Bitmap("enemy5.bmp");
imgEnemy5.MakeTransparent(Color.Black);
//ボール::アイコンを読み込み、背景の赤を透明色として設定
if (imgBall == null) imgBall = new Bitmap("ball.bmp");
imgBall.MakeTransparent(Color.Red);

if (img_onAlly1 == null) img_onAlly1 = new Bitmap("on_ally1.bmp");
img_onAlly1.MakeTransparent(Color.Black);
if (img_onAlly2 == null) img_onAlly2 = new Bitmap("on_ally2.bmp");
img_onAlly2.MakeTransparent(Color.Black);
if (img_onAlly3 == null) img_onAlly3 = new Bitmap("on_ally3.bmp");
img_onAlly3.MakeTransparent(Color.Black);
if (img_onAlly4 == null) img_onAlly4 = new Bitmap("on_ally4.bmp");
img_onAlly4.MakeTransparent(Color.Black);
if (img_onAlly5 == null) img_onAlly5 = new Bitmap("on_ally5.bmp");
img_onAlly5.MakeTransparent(Color.Black);
if (img_onEnemy1 == null) img_onEnemy1 = new Bitmap("on_enemy1.bmp");
img_onEnemy1.MakeTransparent(Color.Black);
if (img_onEnemy2 == null) img_onEnemy2 = new Bitmap("on_enemy2.bmp");
img_onEnemy2.MakeTransparent(Color.Black);
if (img_onEnemy3 == null) img_onEnemy3 = new Bitmap("on_enemy3.bmp");
img_onEnemy3.MakeTransparent(Color.Black);
if (img_onEnemy4 == null) img_onEnemy4 = new Bitmap("on_enemy4.bmp");
img_onEnemy4.MakeTransparent(Color.Black);
if (img_onEnemy5 == null) img_onEnemy5 = new Bitmap("on_enemy5.bmp");
img_onEnemy5.MakeTransparent(Color.Black);
//ボール::アイコンを読み込み、背景の赤を透明色として設定
if (img_onBall == null) img_onBall = new Bitmap("on_ball.bmp");
img_onBall.MakeTransparent(Color.Red);

//プレイヤーとボールのインスタンス作成
ally1 = new Player();
ally2 = new Player();
ally3 = new Player();
ally4 = new Player();
ally5 = new Player();
enemy1 = new Player();
enemy2 = new Player();
enemy3 = new Player();
enemy4 = new Player();
enemy5 = new Player();
ball = new Ball();

//プレイヤーとボールの画像設定
//初期画像
ally1.work_image = imgAlly1;
ally2.work_image = imgAlly2;
ally3.work_image = imgAlly3;
ally4.work_image = imgAlly4;
ally5.work_image = imgAlly5;
enemy1.work_image = imgEnemy1;
enemy2.work_image = imgEnemy2;
enemy3.work_image = imgEnemy3;
enemy4.work_image = imgEnemy4;
enemy5.work_image = imgEnemy5;
ball.work_image = imgBall;

//クリック時
ally1.imgClicked = img_onAlly1;
ally2.imgClicked = img_onAlly2;
ally3.imgClicked = img_onAlly3;
ally4.imgClicked = img_onAlly4;
ally5.imgClicked = img_onAlly5;
enemy1.imgClicked = img_onEnemy1;
enemy2.imgClicked = img_onEnemy2;
enemy3.imgClicked = img_onEnemy3;
enemy4.imgClicked = img_onEnemy4;
enemy5.imgClicked = img_onEnemy5;
ball.imgClicked = img_onBall;

//クリックしていない時
ally1.imgNonClick = imgAlly1;
ally2.imgNonClick = imgAlly2;
ally3.imgNonClick = imgAlly3;
ally4.imgNonClick = imgAlly4;
ally5.imgNonClick = imgAlly5;
enemy1.imgNonClick = imgEnemy1;
enemy2.imgNonClick = imgEnemy2;
enemy3.imgNonClick = imgEnemy3;
enemy4.imgNonClick = imgEnemy4;
enemy5.imgNonClick = imgEnemy5;
ball.imgNonClick = imgBall;

//プレイヤーとボールの初期位置
ally1.work_x = 40;
ally1.work_y = 1;
ally2.work_x = 70;
ally2.work_y = 1;
ally3.work_x = 100;
ally3.work_y = 1;
ally4.work_x = 130;
ally4.work_y = 1;
ally5.work_x = 160;
ally5.work_y = 1;
enemy1.work_x = 300;
enemy1.work_y = 1;
enemy2.work_x = 330;
enemy2.work_y = 1;
enemy3.work_x = 360;
enemy3.work_y = 1;
enemy4.work_x = 390;
enemy4.work_y = 1;
enemy5.work_x = 420;
enemy5.work_y = 1;
ball.work_x = 200;
ball.work_y = 1;


// アニメーションのためのタイマー設定
timer = new Timer();
timer.Interval = 40; // インターバルの間隔(イベント) 
timer.Tick += new EventHandler(timer_TICK);
}

// 再生ボタン
private void Start_Click(object sender, EventArgs e)
{
timer.Start();
}

// 停止ボタン
private void Stop_Click(object sender, EventArgs e)
{
timer.Stop();
}

// 初期配置ボタン
private void first_Click(object sender, EventArgs e)
{
mode = 0; //モードを初期配置(0)に設定
curMode.Text = "初期配置モード";
}

private void rurn1_Click(object sender, EventArgs e)
{
mode = 1; //モードをターン1(1)に設定
curMode.Text = "ターン1";
}

private void turn2_Click(object sender, EventArgs e)
{
mode = 2; //モードをターン2(2)に設定
curMode.Text = "ターン2";
}

private void turn3_Click(object sender, EventArgs e)
{
mode = 3; //モードをターン3(3)に設定
curMode.Text = "ターン3";
}

private void turn4_Click(object sender, EventArgs e)
{
mode = 4; //モードをターン4(4)に設定
curMode.Text = "ターン4";
}

private void turn5_Click(object sender, EventArgs e)
{
mode = 5; //モードをターン5(5)に設定
curMode.Text = "ターン5";
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;

namespace SFS_PROTO
{
//プレイヤー
public class Player
{
//メンバ
public int work_x, work_y; //座標-現在
public int[] pt_x; //座標-ターンごと
public int[] pt_y; //座標-ターンごと
public int width=20, height=20;   //アイコンの幅、高さ
public int range; //移動距離
public bool isClicked; //クリックされているかいないか
public Image work_image; //画像-現在
public Image imgNonClick; //画像-クリックしていない時
public Image imgClicked; //画像-クリック時


//メソッド

//座標設定セット
public void setPositions(int x, int y,int turnNumber)
{
pt_x[turnNumber] = x;
pt_y[turnNumber] = y;
}

//X座標設定
public void setX(int x)
{
work_x = x;
}

//Y座標設定
public void setY(int y)
{
work_y = y;
}

//X座標設定ゲット
public int[] getX()
{
return pt_x;
}

//Y座標設定ゲット
public int[] getY()
{
return pt_y;
}

//アイコン上をクリックしているかを判定し、画像の切り替えを行う
public bool isOnIcon(int x, int y)
{
//味方1
if ((this.work_x <= x) & (x <= this.work_x + this.width) &
(this.work_y <= y) & (y <= this.work_y + this.height))
{
this.work_image = this.imgClicked;
return true;
}else{
this.work_image = this.imgNonClick;
return false;
}
}
}

//ボール
public class Ball
{
//メンバ
public int work_x, work_y; //座標
public int[] pt_x; //X座標-ターンごと
public int[] pt_y; //Y座標-ターンごと
public int width=20, height=20; //大きさ
public int range; //移動距離
public bool isClicked; //クリックされているかいないか
public Image work_image; //画像-現在
public Image imgNonClick; //画像-クリックしていない時
public Image imgClicked; //画像-クリック時


//メソッド

//座標設定セット
public void setPositions(int x, int y, int turnNumber)
{
pt_x[turnNumber] = x;
pt_y[turnNumber] = y;
}

//X座標設定
public void setX(int x)
{
work_x = x;
}

//Y座標設定
public void setY(int y)
{
work_y = y;
}

//X座標設定ゲット
public int[] getX()
{
return pt_x;
}

//Y座標設定ゲット
public int[] getY()
{
return pt_y;
}
//アイコン上をクリックしているかを判定し、画像の切り替えを行う
public bool isOnIcon(int x, int y)
{
//味方1
if ((this.work_x <= x) & (x <= this.work_x + this.width) &
(this.work_y <= y) & (y <= this.work_y + this.height))
{
this.work_image = this.imgClicked;
return true;
}
else
{
this.work_image = this.imgNonClick;
return false;
}
}
}

//画面
public class SFS_PROTO
{


[STAThread]
static void Main()
{
// SFS_PROTOフォームインスタンスの作成
mainForm form = new mainForm();
// フォームの座標とサイズの決定
form.StartPosition = FormStartPosition.Manual;
form.Location = new Point(100,50);
form.Size = new Size(620,450);
// フォームの背景色
//form.BackColor = Color.FromArgb(0xee,0xee,0xee);


// プログラムの実行
Application.Run(form);
}
}
}

二一十の剣~開発記その2

こんばんわ。

今日も、プログラムの話ですまない。

昨日の課題だった以下の2つを解決

・画面のチラツキ
原因は、再描画時に背景を全部再描画してしまうことにあった。
調査したら、ダブルバッファリングという技術があったので採用。
メモリ上で、画像を完成させてから描画する技術。
方法は、SetStyleメソッドで、3つの設定をコンストラクタに追加するだけ。
完全にチラツキがなくなるのを確認。

・画像を表示する。
Image.FormatFileメソッドを使用して画像をメモリに展開し、drawImageメソッドで描画するだけだった。

これで、後は、マウスで動きを設定できるようなシステムを考えれば、プロトは完成するな。

案:
・設定モードを作成する。
・プレイヤーやボールをクリックすると、設定モードに移行する。
・動きの設定は、プレイヤーの移動後のポイントをクリックするのみとする。
・プレイヤーやボールは直線でのみ移動できるとする。(プロトはとりあえずこれで作る。理由は、曲線の動きはプログラムが面倒そうだから)
・プレイヤーの動きには移動可能範囲を設定する。(対象を中心とした円を考える)
・ボールは、コート内ならどこでも移動可能とする。
・行動ターンがあることとする。プレイヤーとボールの動きは、1ターン2ターンと段階で設定できるようにする。
・ターンごとに、アニメーションを止めれるようにする。

課題:
・プレイヤーとボールをクリックした際の判定の仕様
・設定の保存の仕様
・ターンの仕組みの仕様
・設定モードの仕組みの仕様

おおまかにこれくらいでやってみることにしよう。
クラスわけとかは、とりあえず適当にやってみよう。

ソース:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;

namespace SFS_PROTO
{
public class SFS_PROTO:Form
{
private int ally_width = 20, ally_height= 20;
private int ally1_x = 300, ally2_x = 300, ally3_x = 150, ally4_x = 150;
private int ally1_y = 130, ally2_y = 170, ally3_y = 100, ally4_y = 200;
private int enemy_width = 20, enemy_height = 20;
private int enemy1_x =350, enemy2_x=350, enemy3_x = 450, enemy4_x = 450;
private int enemy1_y = 130, enemy2_y=160, enemy3_y =100, enemy4_y=200;
private int ball_width=10, ball_height=10;
private int ball_x=310,ball_y=160;

private Image image;

private void PROTO_TICK(object sender, EventArgs e)
{

ally1_x++;
ally1_y++;
Invalidate();

}

// Timerを実行するメソッド
public SFS_PROTO()
{
// 画面のちらつきを抑えるため、以下の設定を追加
SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.DoubleBuffer ,true);

Timer timer = new Timer();
timer.Interval = 20; // 再描画の間隔 
timer.Tick += new EventHandler(PROTO_TICK);
timer.Start();
}

// 描画クラスOnPaintのオーバーロード
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
////コート(フィールドの背景)の描画
//Brush fd = new SolidBrush(Color.Green);
//e.Graphics.FillRectangle(fd,20,20,600,300);

////コート(白線)の描画
//Pen whLine = new Pen(Color.White);
//whLine.Width = 5;
//e.Graphics.DrawRectangle(whLine,17,17,600,300); //タッチライン
//e.Graphics.DrawLine(whLine,317,17,317,317); //ハーフウェイライン
//e.Graphics.DrawEllipse(whLine,282,130,70,70); //センターサークル

// コートの画像(test.bmp)の読み込みと表示
if (image == null) image = Image.FromFile("test.bmp");
e.Graphics.DrawImage(image, 0, 0,600,300);

//プレイヤー味方の描画
Brush ally = new SolidBrush(Color.Blue);
e.Graphics.FillEllipse(ally, ally1_x, ally1_y, ally_width, ally_height);
e.Graphics.FillEllipse(ally, ally2_x, ally2_y, ally_width, ally_height);
e.Graphics.FillEllipse(ally, ally3_x, ally3_y, ally_width, ally_height);
e.Graphics.FillEllipse(ally, ally4_x, ally4_y, ally_width, ally_height);

//プレイヤー敵の描画
Brush enemy = new SolidBrush(Color.Red);
e.Graphics.FillEllipse(enemy, enemy1_x, enemy1_y, enemy_width, enemy_height);
e.Graphics.FillEllipse(enemy, enemy2_x, enemy2_y, enemy_width, enemy_height);
e.Graphics.FillEllipse(enemy, enemy3_x, enemy3_y, enemy_width, enemy_height);
e.Graphics.FillEllipse(enemy, enemy4_x, enemy4_y, enemy_width, enemy_height);

//ボールの描画
Brush ball = new SolidBrush(Color.Black);
e.Graphics.FillEllipse(ball, ball_x , ball_y, ball_width, ball_height);


}

[STAThread]
static void Main()
{
// SFS_PROTOフォームインスタンスの作成
Form form1 = new SFS_PROTO();
// フォームの座標とサイズの決定
form1.StartPosition = FormStartPosition.Manual;
form1.Location = new Point(100,50);
form1.Size = new Size(800,600);
// フォームの背景色
//form1.BackColor = Color.FromArgb(0xee,0xee,0xee);

// プログラムの実行
Application.Run(form1);
}
}
}

二一十の剣~フットサルのフォーメションソフト開発記

どうも、フットサルソフトの開発記録を残すことにしようかなと。


理由は、
・自分の成長を視覚化できるから
・自分自身への戒めになるから
・課題と解決の足跡を残せるから
・他の人の意見を聞けるから


でも、プログラム的なことなので、興味ない人には、まったくつまらないと思うが、まぁ、いいでしょう。基本、放置のブログになってるので、なんもないよりはいいでしょう。

その代わり、完成したら、鬼骨のページに、フォーメーション談議の項目が増えると思うので了承してください。


で、ようやく、簡単なアニメーションができるようになりました。

本当に簡単で、System.Windows.Forms.Timerクラスを利用して、何秒かごとにイベントを起こし、再描画処理を行うようにする方法を見つけただけです。

課題は、
・画面をいちいち全部、再描画しているため、チラつきが激しい。
→背景を画像にしたらどうか試す。

・固定的に、プレイヤー1が斜めにゆっくり動くだけなので、マウスでどのように動くかを設定できるようにする。
→動きの設定の仕組みを考える

・画像がしょぼくて、使ってて楽しくない。
→・画像データを動かせるようにする

といったところ。


まだぜんぜん、意見をいただけるほどのレベルじゃないね。
まぁ、それもそのうち。


ソース:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;

namespace SFS_PROTO
{
public class SFS_PROTO:Form
{
private int ally_width = 20, ally_height= 20;
private int ally1_x = 300, ally2_x = 300, ally3_x = 150, ally4_x = 150;
private int ally1_y = 130, ally2_y = 170, ally3_y = 100, ally4_y = 200;
private int enemy_width = 20, enemy_height = 20;
private int enemy1_x =350, enemy2_x=350, enemy3_x = 450, enemy4_x = 450;
private int enemy1_y = 130, enemy2_y=160, enemy3_y =100, enemy4_y=200;
private int ball_width=10, ball_height=10;
private int ball_x=310,ball_y=160;

private void PROTO_TICK(object sender, EventArgs e)
{

ally1_x++;
ally1_y++;
Invalidate();

}

// Timerを実行するメソッド
public SFS_PROTO()
{
Timer timer = new Timer();
timer.Interval = 100; // 再描画の間隔 
timer.Tick += new EventHandler(PROTO_TICK);
timer.Start();
}

// 描画クラスOnPaintのオーバーロード
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//コート(フィールドの背景)の描画
Brush fd = new SolidBrush(Color.Green);
e.Graphics.FillRectangle(fd,20,20,600,300);

//コート(白線)の描画
Pen whLine = new Pen(Color.White);
whLine.Width = 5;
e.Graphics.DrawRectangle(whLine,17,17,600,300); //タッチライン
e.Graphics.DrawLine(whLine,317,17,317,317); //ハーフウェイライン
e.Graphics.DrawEllipse(whLine,282,130,70,70); //センターサークル

//プレイヤー味方の描画
Brush ally = new SolidBrush(Color.Blue);
e.Graphics.FillEllipse(ally, ally1_x, ally1_y, ally_width, ally_height);
e.Graphics.FillEllipse(ally, ally2_x, ally2_y, ally_width, ally_height);
e.Graphics.FillEllipse(ally, ally3_x, ally3_y, ally_width, ally_height);
e.Graphics.FillEllipse(ally, ally4_x, ally4_y, ally_width, ally_height);

//プレイヤー敵の描画
Brush enemy = new SolidBrush(Color.Red);
e.Graphics.FillEllipse(enemy, enemy1_x, enemy1_y, enemy_width, enemy_height);
e.Graphics.FillEllipse(enemy, enemy2_x, enemy2_y, enemy_width, enemy_height);
e.Graphics.FillEllipse(enemy, enemy3_x, enemy3_y, enemy_width, enemy_height);
e.Graphics.FillEllipse(enemy, enemy4_x, enemy4_y, enemy_width, enemy_height);

//ボールの描画
Brush ball = new SolidBrush(Color.Black);
e.Graphics.FillEllipse(ball, ball_x , ball_y, ball_width, ball_height);


}

[STAThread]
static void Main()
{
// SFS_PROTOフォームインスタンスの作成
Form form1 = new SFS_PROTO();
// フォームの座標とサイズの決定
form1.StartPosition = FormStartPosition.Manual;
form1.Location = new Point(100,50);
form1.Size = new Size(800,600);
// フォームの背景色
//form1.BackColor = Color.FromArgb(0xee,0xee,0xee);

SFS_PROTO aa = new SFS_PROTO();

// プログラムの実行
Application.Run(form1);
}
}
}
プロフィール

グレゴリオ鬼骨

Author:グレゴリオ鬼骨
大分市で活動しているフットサルチーム「グレゴリオ鬼骨」の公式ブログです。未経験者ばかりですが地元の仲間達とワイワイ楽しくかつ勝利を目指して活動しているフットサルチームです。

最新記事
カテゴリ
最新コメント
月別アーカイブ
リンク
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。