WindowsMobile のアプリを Visual Studio Express で無理やり作る会に行ってきた

友人の誘いでちょっと行ってきた。
行った先はこれです。
http://d.hatena.ne.jp/n7shi/20101115

Expressな設定をしたあとは、フリー開発で
なんとなく、ボールが動くとかクリックしたら何かアクションするようなものを作りたかったので
いろいろ友人や他の人に聞きながらなんとかできたのが、以下の。


左端を上から下にボールが落ちているので、それをクリックすると
新しいボールが右に流れていきます。
とくにゲームとかにもなってないですが、動かし方を知りたかったので。
とくに、新しく作ったボールの描画あたりがよくわからなくて
質問しまくっていました。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            Text = "アプリ";
            Size = new Size(240, 320);
            MinimizeBox = false;
            SuspendLayout();
            AutoScaleDimensions = new SizeF(96, 96);
            AutoScaleMode = AutoScaleMode.Dpi;
            Menu = new MainMenu();
            InitializeComponent();
            ResumeLayout(false);
        }

// x,y はボールの座標、xx,yy はボールをクリックしたときの座標、px,py は新しく作ったボールの座標
        private int x = 0;
        private int y = 0;
        private int xx;
        private int yy;
        private int px;
        private int py;
// list は画面表示のときに作成したボールをすべて描画するためのリスト
        private List<Point> list = new List<Point>();

// タイマーを作成
        private void InitializeComponent()
        {
            var timer = new Timer();
            timer.Interval = 50;
            timer.Tick += new EventHandler(timer_Trick);
            timer.Tick += new EventHandler(timer_Trick2);
            timer.Enabled = true;
        }


// x 座標(横)に3ずつ動く、右端まで行ったら左から
        void timer_Trick(object sender, EventArgs e)
        {
            x += 3;
            if (x >= ClientSize.Width) x = 0;
            Invalidate();
        }

// y 座標(縦)に4ずつ動く、下まで行ったら上から
        void timer_Trick2(object sender, EventArgs e)
        {
            y += 4;
            if (y >= ClientSize.Height) y = 0;
            Invalidate();
        }

// マウスをクリックした場所がボールの辺りだったらリスト list に座標を追加(スタート位置は左端なのでX座標は0)
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            if (e.X <= 16 && e.Y >= y - 8 && e.Y <= y + 8)
            {
                yy = y;
                list.Add(new Point(0 , yy));
            }
        }

// 描画するとこ
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            
// listに入ってるものすべてを描画            
            for (int i = 0; i < list.Count;i++)
            {
// listの中身i番目の(X,Y)のXを3つ進めて、それをlistの中身i番目に戻す
                var p = list[i];
                p.X += 3;
                list[i] = p;
                using (var brush = new SolidBrush(Color.Purple))
                {
                    px = p.X;
// 端っこまで行ったら元の位置に戻す
                    if (px >= ClientSize.Width) px = p.X  - 240;
                    e.Graphics.FillEllipse(brush, px, p.Y, 16, 16);
                }
            }
            

// 最初から縦に動いているものを描画
            using (var brush = new SolidBrush(Color.Red))
            {
                e.Graphics.FillEllipse(brush, 0, y, 16, 16);
            }
        }
       
    }
}

でも、実は C# とプログラミング自体がよくわからくて
クリックして新しく作ったボールは2周したらなくなってしまいます。
そんなの書いてないと思う。
オブジェクトに寿命があるのか、それともどっか右端の見えないとこに飛んじゃってるのか。


勉強会に行った感想としては、焼肉おいしかった。