u`
eLXgҁFp.345 Zq̃I[o[[hƂ 
Q[JKFG@̏oEړ̃tH[AeƓG@̏Փ˔

p.345 Zq̃I[o[[hƂ

E2+Zq̂悤ɁAIyȟ^ɂčpقȂ̂AZq̃I[o[[hƂ
Egݍ݌^(p.38)ɑ΂鉉Zq̃I[o[[h̓VXe`ĂAύXłȂ
EA[U`^ɑ΂鉉Zq̃I[o[[h́A[U`^\NX̒Œ`邱Ƃ\
EႦ΁AXWYWWNX̃IuWFNgǂ2+ZqŉZł悤ɒ`Ă΁A
@W a(3, 2)Ab(1, 5) ɂāAa + b (3 + 2, 2 + 5) = (5, 7) Ƃ邱Ƃ\
EeLXgł͕f\NXɂƂāAf̉ZZq̃I[o[[hŎĂ
EAwImOɂȂĂ̂ŁAXWYWWNXɒuė悤

p.347iXWYWWNXjmap01.cs

EeLXgp.347complex01.cs̎dlL̂悤ɕύXāAZq̃I[o[[hɂ悤
ENXFMap
ECX^XϐFint x, y
EvpeBFint X(xp), int Y(yp)
ÊȂRXgN^F MAP()  x0Ay0
Eint^QRXgN^F MAP(x, y)
EL̓mFMain()\bh

쐬

//p.347 map01.cs(complex01.cs)
using System;
class Map { //WNX
    int x; //XW̃f[^o 
    int y; //YW̃f[^o 
    public int X { //XWp̃vpeB
        get { return x; }
        set { x = value; }
    }
    public int Y { //YWp̃vpeB
        get { return y; }
        set { y = value; }
    }
    public Map() { //ftHgRXgN^
        x =  y = 0;
    }
    public Map(int x, int y) { //XWAYWw肷RXgN^
        this.x = x;
        this.y = y;
    }
}
class Map01 {
    public static void Main() {
        Map A = new Map(); //WA(0,0)𐶐
        A.X = 10;
        A.Y = 5; //W(10, 5)ɂȂ
        Map B = new Map(2, 3); //WB(2,3)𐶐
        Console.WriteLine("WA({0}, {1})łB", A.X, A.Y);
        Console.WriteLine("WB({0}, {1})łB", B.X, B.Y);
    }
}

p.349 PZq̃I[o[[h

ENXoperatorL[[hpă\bhɋ߂\L邱ƂŁAZq̃I[o[[h\
EPZq̃I[o[[hł́Apublic staticŁu߂l^ operator Zq(^ )v`AŉZʂreturnΗǂ
EZq̃I[o[[h̊{[ƂāẢZq̈ӖƂꂽ`sȂƂ
EāAP-Zq̃I[o[[hł́A߂l^ƈ^NXɍ킹ƗǂBāF
@public static NX operator-(NX ) { return ̕]; }
EWNXMapɓĂ͂߂ƉL̂悤ɂȂAXWYW̕]ɂȂ
@public static Map operator-(Map w) { return new Map(-w.x, -w.y); }
 eLXgopov01.csł͌pNXɂĒPZq̃I[o[[hLqĂ邪ApKv͂Ȃ

p.349 Map02.csFP-Zq̃I[o[[h

EMap01.csɒP-Zq̃I[o[[hǋLēmF悤B
EP-ZqɂAXWYW̕]sƂB
EāAMapNX̃IuWFNgA(x, y)ɂāA-A(-x, -y)ƂȂB

쐬

//p.347 map02.cs(opov01.cs)
using System;
class Map { //WNX
    int x; //XW̃f[^o 
    int y; //YW̃f[^o 
    public int X { //XWp̃vpeB
        get { return x; }
        set { x = value; }
    }
    public int Y { //YWp̃vpeB
        get { return y; }
        set { y = value; }
    }
    public Map() { //ftHgRXgN^
        x = y = 0;
    }
    public Map(int x, int y) { //XWAYWw肷RXgN^
        this.x = x;
        this.y = y;
    }
    public static Map operator-(Map w) { //P-Zq̃I[o[[h
        return new Map(-w.x, -w.y); //XWYW̕𔽓]ʂԂ
    }
}
class Map01 {
    public static void Main() {
        Map A = new Map(2, 3); //WB(2,3)𐶐
        Map B = -A; //P-Zq̃I[o[[hp
        Console.WriteLine("WA({0}, {1})łB", A.X, A.Y);
        Console.WriteLine("WB({0}, {1})łB", B.X, B.Y);
    }
}

p.349 Map03.csFP+Zq̃I[o[[h

EMap02.csɒP+Zq̃I[o[[hǋLēmF悤B
EP+ZqɂAW(0,0)W܂ł̋ŕԂƂB
EႦ΁AMapNX̃IuWFNgA(-3, -4)ɂāA+A5.0ƂȂB
E͂R̒藝(XŴQ{YŴQ)̕œ
Edouble Math.Sqrt(double)\bhœƗǂ

쐬

//p.347 map03.cs(P*Zq̃I[o[[h)
using System;
class Map { //WNX
    int x; //XW̃f[^o 
    int y; //YW̃f[^o 
    public int X { //XWp̃vpeB
        get { return x; }
        set { x = value; }
    }
    public int Y { //YWp̃vpeB
        get { return y; }
        set { y = value; }
    }
    public Map() { //ftHgRXgN^
        x = y = 0;
    }
    public Map(int x, int y) { //XWAYWw肷RXgN^
        this.x = x;
        this.y = y;
    }
    public static Map operator -(Map w) { //P-Zq̃I[o[[h
        return new Map(-w.x, -w.y); //XWYW̕𔽓]ʂԂ
    }
    public static double operator +(Map w) { //P+Zq̃I[o[[h
        return Math.Sqrt(w.x * w.x + w.y * w.y); //eŴQ̘a̕Ԃ
    }
}
class Map01 {
    public static void Main() {
        Map A = new Map(-3, -4); //WA𐶐
        Console.WriteLine("WA({0}, {1})ŁA{2}", A.X, A.Y, +A);
    }
}

p.353 QZq̃I[o[[h

EQZq̃I[o[[hł́Apublic staticŁu߂l^ operator Zq(^@ @, ^A A)v`AŉZʂreturnΗǂ
EIyh@AEIyhAƂȂ

p.349 Map04.csFQ+Zq̃I[o[[h (opov02.cs)

EMap02.csɂQ+Zq̃I[o[[hǋLēmF悤B
EQ+ZqɂAA + B ͊eW̘aMapIuWFNgԂƂB
EႦ΁AMapNX̃IuWFNgA(-3, -4)AB(4, 2)ɂāAA + B(1, -2)ƂȂB

쐬

//p.349 Map04.csFQ+Zq̃I[o[[h (opov02.cs)
using System;
class Map { //WNX
    int x; //XW̃f[^o 
    int y; //YW̃f[^o 
    public int X { //XWp̃vpeB
        get { return x; }
        set { x = value; }
    }
    public int Y { //YWp̃vpeB
        get { return y; }
        set { y = value; }
    }
    public Map() { //ftHgRXgN^
        x = y = 0;
    }
    public Map(int x, int y) { //XWAYWw肷RXgN^
        this.x = x;
        this.y = y;
    }
    public static Map operator -(Map w) { //P-Zq̃I[o[[h
        return new Map(-w.x, -w.y); //XWYW̕𔽓]ʂԂ
    }
    public static double operator +(Map w) { //P+Zq̃I[o[[h
        return Math.Sqrt(w.x * w.x + w.y * w.y); //eŴQ̘a̕Ԃ
    }
    public static Map operator +(Map a, Map b) { //Q+Zq̃I[o[[h
        return new Map(a.x + b.x, a.y + b.y); //eW̘aIuWFNgԂ
    }
}
class Map01 {
    public static void Main() {
        Map A = new Map(-3, -4); //WA𐶐
        Map B = new Map(4, 2); //WB𐶐
        Console.WriteLine("A + B({0}, {1})", (A + B).X, (A + B).Y);
    }
}

p.356iQ==Zq̃I[o[[h j

EQ==Zq͓ʈ̉ZqŁAI[o[[hꍇAbool^ԂKv
E܂AɂQ!=ZqI[o[[hKv
EȂAéureturn !(@ == A);vŒŗǂ
 eLXgɂEquals\bhGetHashCode\bh̃I[o[ChKvƂ邪AK{ł͂Ȃ

p.358 Map05.csFQ==ZqAQ!=Zq̃I[o[[h (opov03.cs)

EMap04.csɂQ==ZqAQ!=Zq̃I[o[[hǋLēmF悤B
EQ==ZqɂAA == B ͊eWɓtrueAłȂfalseԂƂB
EQ!=ZqɂAA != B ͊eWɓfalseAłȂtrueԂƂB

쐬

//p.349 Map04.csFQ+Zq̃I[o[[h (opov02.cs)
using System;
class Map { //WNX
    int x; //XW̃f[^o 
    int y; //YW̃f[^o 
    public int X { //XWp̃vpeB
        get { return x; }
        set { x = value; }
    }
    public int Y { //YWp̃vpeB
        get { return y; }
        set { y = value; }
    }
    public Map() { //ftHgRXgN^
        x = y = 0;
    }
    public Map(int x, int y) { //XWAYWw肷RXgN^
        this.x = x;
        this.y = y;
    }
    public static Map operator -(Map w) { //P-Zq̃I[o[[h
        return new Map(-w.x, -w.y); //XWYW̕𔽓]ʂԂ
    }
    public static double operator +(Map w) { //P+Zq̃I[o[[h
        return Math.Sqrt(w.x * w.x + w.y * w.y); //eŴQ̘a̕Ԃ
    }
    public static Map operator +(Map a, Map b) { //Q+Zq̃I[o[[h
        return new Map(a.x + b.x, a.y + b.y); //eW̘aIuWFNgԂ
    }
    public static bool operator ==(Map a, Map b) { //Q==Zq̃I[o[[h
        return a.x == b.x && a.y == b.y; //eW̘aIuWFNgԂ
    }
    public static bool operator !=(Map a, Map b) { //Q!=Zq̃I[o[[h
        return !(a == b); //Q==Zq̃I[o[[ȟʂ𔽓]ĕԂ
    }
}
class Map01 {
    public static void Main() {
        Map A = new Map(-3, -4); //WA𐶐
        Map B = new Map(4, 2); //WB𐶐
        Console.WriteLine("A == B{0}AA != B{1}", A == B, A != B);
    }
}

eLXgҎ\Fp.362 KQ(Zq̃I[o[[h̕) 

Q[JKFG@̏oEړ̃tH[AeƓG@̏Փ˔

K32 G@̏oƈړiČfځj

EԊuƂɓG@@̒̏[͈͊OɏoAɈړ悤ɂ悤
EG@̍ő吔20@ƂAȏ͏oȂ
EoԊu̓^C}[C^[o50{Ƃ
Eړ5Ƃ
EeƓlɉʉŌȂȂoȌԂɖ߂
EG@̉摜͉L𗘗p\
@http://rundog.org/si/enemy.gif

菇iČfځ{j

@ G@摜̓ǂݍ݂ǋLBImage enemyi 
A G@̍ő吔Bint maxenemy 
B G@̍\̃IuWFNgz𐶐 Item[] enemya 
C G@̏o҂Ԃ waitenemy 
D G@̏oԊu enemyint 
E `揈FSG@ɂāA\Ԃł̂\鏈
F ^C}[CxgFG@o҂Ԃ[ł΁AŏɌ\łG@vf\ԂɂA@ƓXWA[̒YWȂǂݒ
@܂AG@̏o҂ԂɓG@̏oԊuZbg
@P@o甲
G ^C}[CxgFȏSG@ɂāAֈړA[艺ɏo\ɂ
H ^C}[CxgFG@o҂ԂZbgĂJEg_E

쐬

//K32 G@̏oƈړ
using System; //ėpIɗp
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //SizeAImagep
struct Item { //ACe\\
    public Image i; //摜
    public int x;  //SXW
    public int y;  //SYW
    public int hv; //Ȇx(͕̐AE͐̐)
    public int vv; //㉺̑x(͕̐A͐̐)
    public int v;  //\(0F\A1ȏF\)
}
class Program : Form { //FormNX̔hNX
    [System.Runtime.InteropServices.DllImport("user32.dll")] //DLLC|[g
    private static extern short GetKeyState(int nVirtKey); //O`w
    int gamemode = 0; //[h(0:^Cg,1:vC,9:I)
    int score = 0; //XRA
    Image backi = Image.FromFile("backb.bmp"); //wi摜Ǎ
    Image playeri = Image.FromFile("player.gif"); //@ʏ摜Ǎ
    Image playerl = Image.FromFile("playerl.gif"); //@摜Ǎ
    Image playerr = Image.FromFile("playerr.gif"); //@E摜Ǎ
    Image bulleti = Image.FromFile("bullet.gif"); //e摜Ǎ
    Image bullet2i = Image.FromFile("bullet2.gif"); //e摜2Ǎ
    Image enemyi = Image.FromFile("enemy.gif"); //yǉzG@摜Ǎ
    Pen pen1 = new Pen(Color.Red, 2); //ԐF2̃y
    Brush brush1 = new SolidBrush(Color.FromArgb(63, 255, 0, 0)); //ԂuV
    Font font1 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐
    Font fontt = new Font("CI", 80, FontStyle.Bold); //tHg𐶐
    Font fontm = new Font("CI", 25, FontStyle.Bold); //tHg𐶐
    Brush brushs = new SolidBrush(Color.Yellow); //F̃uV
    Timer timer = new Timer(); //^C}[̐
    int backy = 0; //1ڂ̔wi`JnYW
    Item player; //@̍\̃IuWFNg
    const int maxpb = 10; //e̍ő吔
    Item[] pba = new Item[maxpb]; //e̍\̃IuWFNgz
    const int cold = 10; //e˂̗p
    int waitpb = 0; //e˂̑҂
    const int maxenemy = 20; //yǉzG@̍ő吔
    Item[] enemya = new Item[maxenemy]; //yǉzG@̍\̃IuWFNgz
    int waitenemy = 0; //yǉzG@̏o҂
    int enemyint = 50; //yǉzG@̏oԊu
    //Wp摜`揈
    private void DrawItem(PaintEventArgs e, Item it) {
        int xx = it.x - it.i.Width / 2; //XW𓾂
        int yy = it.y - it.i.Height / 2; //YW𓾂
        e.Graphics.DrawImage(it.i, xx, yy);
    }
    //`揈̃I[oCh
    protected override void OnPaint(PaintEventArgs e) { 
        base.OnPaint(e); //{NX̕`揈Ă
        e.Graphics.DrawImage(backi, 0, backy); //wi摜`
        e.Graphics.DrawImage(backi, 0, backy - backi.Height); //wi摜`
        if (gamemode == 0) { //X^[gʁH
            e.Graphics.DrawString("GAME1", fontt, brushs, 100, 150); //^Cg\
            e.Graphics.DrawString("Hit Enter Key", fontm, brushs, 200, 300); //bZ[W\
        } else if (gamemode == 1) { //vCʁH
            string s = String.Format("SCORE:{0:000,000}", score); //XRA
            e.Graphics.DrawString(s, font1, brushs, 400, 10); //XRA\
            switch (player.hv) { //@̌ɂĕ
                case 0:  player.i = playeri; break; //ʏ摜ɂ
                case -1: player.i = playerl; break; //摜ɂ
                case 1:  player.i = playerr; break; //E摜ɂ
            }
            DrawItem(e, player); //@`
            foreach (var pb in pba) { //SeɂČJԂ
                if (pb.v == 1) { //eH
                    DrawItem(e, pb); //e`
                }
            }
            foreach (var enemy in enemya) { //yȉǉzSG@ɂČJԂ
                if (enemy.v == 1) { //G@H
                    DrawItem(e, enemy); //G@`
                }
            }
        }

    }
    //L[͎
    void OnKeyDown(object o, KeyEventArgs e) { 
        if (e.KeyCode.ToString() == "Escape") { //EscL[Ă
            Close(); //tH[I
        }
        //^CgʂEnterL[Ă
        if (gamemode == 0 && e.KeyCode.ToString() == "Return") { 
            gamemode = 1; //vCɑJ
            timer.Start(); //^C}[Jn
        }
        Invalidate(); //ʍĕ`˗
    }
    //^C}[Cxg
    void Play(object o, EventArgs e) { 
        backy = (backy + 1) % backi.Height; //1ڂ̔wi`JnYW
        player.hv = 0; //@̌𖳂ɂĂ
        if (player.x > playeri.Width / 2 && GetKeyState((int)Keys.Left) < 0) { //͈͓ŁL[ĂH
            player.x -= 10; //@
            player.hv = -1; //
        }
        if (player.x < backi.Width - playeri.Width / 2 && GetKeyState((int)Keys.Right) < 0) { //͈͓ŁL[ĂH
            player.x += 10; //@E
            player.hv = 1; //E
        }
        if (GetKeyState((int)Keys.Space) < 0) { //Xy[XL[ĂH
            if (waitpb <= 0) { //eˑ҂Ԃ[H
                for (int i = 0; i < maxpb; i++) { //SeɂČJԂ
                    if (pba[i].v == 0) { //e\H
                        pba[i].v = 1; //\ɂ
                        pba[i].i = bulleti; //摜
                        pba[i].x = player.x; //XW͎@Ɠ
                        pba[i].y = player.y - player.i.Height / 2 - pba[i].i.Height / 2; //YW͎@̒
                        pba[i].vv = -5; //ړx
                        waitpb = cold; //eˑ҂ԂZbg
                        break; //1˂łOK
                    }
                }
            }
        } else { //Xy[XL[ĂȂH
            waitpb = 0; //eˑ҂Ԃ[ɂĔˉ\ɂ
        }
        if (waitenemy <= 0) { //yȉǉzG@o҂Ԃ[H
            for (int i = 0; i < maxenemy; i++) { //SG@ɂČJԂ
                if (enemya[i].v == 0) { //G@\H
                    enemya[i].v = 1; //\ɂ
                    enemya[i].i = enemyi; //摜
                    enemya[i].x = player.x; //XW͎@Ɠ
                    enemya[i].y = -enemyi.Height; //YW͏[̒
                    enemya[i].vv = 5; //ړx
                    waitenemy = enemyint; //eˑ҂ԂZbg
                    break; //1@ołOK
                }
            }

        }
        for (int i = 0; i < maxpb; i++) { //SeɂČJԂ
            if (pba[i].v != 0) { //e݁H
                pba[i].i = (pba[i].i == bulleti) ? bullet2i : bulleti; //摜ݕύX
                pba[i].y += pba[i].vv; //ֈړ
                if (pba[i].y + pba[i].i.Height / 2 < 0) { //ʏ[ɏo
                    pba[i].v = 0; //e
                }
            }
        }
        for (int i = 0; i < maxenemy; i++) { //yȉǉzSG@ɂČJԂ
            if (enemya[i].v != 0) { //G@݁H
                enemya[i].y += enemya[i].vv; //ֈړ
                if (enemya[i].y - enemya[i].i.Height / 2 > backi.Height) { //ʉ[艺ɏo
                    enemya[i].v = 0; //G@
                }
            }
        }
        if (waitpb > 0) { //eˑ҂ԂZbgĂ
            waitpb--; //JEg_E
        }
        if (waitenemy > 0) { //yȉǉzG@o҂ԂZbgĂ
            waitenemy--; //JEg_E
        }
        Invalidate(); //ʍĕ`˗
    }
    //RXgN^
    Program() { 
        DoubleBuffered = true; //_uobt@OL
        KeyDown += new KeyEventHandler(OnKeyDown); //L[̓Cxgo^
        timer.Tick += new EventHandler(Play); //^C}[Cxgo^
        timer.Interval = 10; //^C}[C^[o(~b)
        player.i = playeri;  //@̉摜
        player.x = 320; //@̒SXW
        player.y = 410; //@̒SYW
        player.hv = 0;  //@̍Ȇx
    }
    public static void Main() {
        Program f = new Program(); //̃IuWFNg𐶐
        f.Size = new Size(660, 520); //tH[̃TCYݒ
        f.Text = "Game"; //tH[ݒ
        f.ControlBox = false; //Rg[{bNX\
        f.FormBorderStyle = FormBorderStyle.Fixed3D; //TCYύX}~
        Application.Run(f); //tH[o
    }
}

e[}30 Փ˔

E`(lp`)̏Փ˔́AdȂĂ镔̗LłłB
EA`ȊOɗpƊpɂ镔ŉߓx̔ɂȂĂ܂B
Ê悤ȏꍇ́Aȉ~̏Փ˔sΗǂ
@https://ha232.rundog.org/wp-content/uploads/2024/02/908f84303f68d13037495fed5c6bdfd0-1024x465.png
Eo̒SԂ̋𓾂āAo̓a̘aƔrΗǂB
E召rȂ̂ŁAKv͂ȂAŴQ̘aƓa̘âQr悤
EȂAȉ~ɋ߂ꍇlāAaɂ́Aƕ̏̔p悤

K33 eƓG@̏Փ˔

E^C}[ŌĂ΂鏈ɂāAȏSĂ̓G@ƑSĂ̎ȇgݍ킹ɂāAՓ˔sAՓ˂ĂA̓G@Ǝe̗\ɂ悤

菇

@ Փ˔p̃\bh bool isHit(Item a, Item b)
@EabXŴQYŴQ̘a𓾂ċ̂QƂ
@Ea̕Ȃ畝̔AłȂ΍̔aaƂ
@Eb̕Ȃ畝̔AłȂ΍̔abƂ
@ÊQ悪AaaƓab̘âQ斢ȂtrueAłȂfalseԂ
A ^C}[Cxgɂđݒ̑SG@ɂĈȉJԂ
@Eݒ̑SeɂāA̓G@ƏՓ˒`FbNAՓ˒Ȃo\ɂ
@EāA̓G@ɐi

쐬

//K33 eƓG@̏Փ˔
using System; //ėpIɗp
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //SizeAImagep
struct Item { //ACe\\
    public Image i; //摜
    public int x;  //SXW
    public int y;  //SYW
    public int hv; //Ȇx(͕̐AE͐̐)
    public int vv; //㉺̑x(͕̐A͐̐)
    public int v;  //\(0F\A1ȏF\)
}
class Program : Form { //FormNX̔hNX
    [System.Runtime.InteropServices.DllImport("user32.dll")] //DLLC|[g
    private static extern short GetKeyState(int nVirtKey); //O`w
    int gamemode = 0; //[h(0:^Cg,1:vC,9:I)
    int score = 0; //XRA
    Image backi = Image.FromFile("backb.bmp"); //wi摜Ǎ
    Image playeri = Image.FromFile("player.gif"); //@ʏ摜Ǎ
    Image playerl = Image.FromFile("playerl.gif"); //@摜Ǎ
    Image playerr = Image.FromFile("playerr.gif"); //@E摜Ǎ
    Image bulleti = Image.FromFile("bullet.gif"); //e摜Ǎ
    Image bullet2i = Image.FromFile("bullet2.gif"); //e摜2Ǎ
    Image enemyi = Image.FromFile("enemy.gif"); //yǉzG@摜Ǎ
    Pen pen1 = new Pen(Color.Red, 2); //ԐF2̃y
    Brush brush1 = new SolidBrush(Color.FromArgb(63, 255, 0, 0)); //ԂuV
    Font font1 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐
    Font fontt = new Font("CI", 80, FontStyle.Bold); //tHg𐶐
    Font fontm = new Font("CI", 25, FontStyle.Bold); //tHg𐶐
    Brush brushs = new SolidBrush(Color.Yellow); //F̃uV
    Timer timer = new Timer(); //^C}[̐
    int backy = 0; //1ڂ̔wi`JnYW
    Item player; //@̍\̃IuWFNg
    const int maxpb = 10; //e̍ő吔
    Item[] pba = new Item[maxpb]; //e̍\̃IuWFNgz
    const int cold = 10; //e˂̗p
    int waitpb = 0; //e˂̑҂
    const int maxenemy = 20; //G@̍ő吔
    Item[] enemya = new Item[maxenemy]; //G@̍\̃IuWFNgz
    int waitenemy = 0; //G@̏o҂
    int enemyint = 50; //G@̏oԊu
    //Wp摜`揈
    private void DrawItem(PaintEventArgs e, Item it) {
        int xx = it.x - it.i.Width / 2; //XW𓾂
        int yy = it.y - it.i.Height / 2; //YW𓾂
        e.Graphics.DrawImage(it.i, xx, yy);
    }
    //yǉzȉ~`̏Փ˔(ACeaƃACebՓ˂Ă邩ǂԂ)
    private bool isHit(Item a, Item b) {
        int dest = (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y); //Q
        double ra = (a.i.Width < a.i.Height) ? a.i.Width / 2.0 : a.i.Height / 2.0; //aa
        double rb = (b.i.Width < b.i.Height) ? b.i.Width / 2.0 : b.i.Height / 2.0; //ab
        return dest < (ra + rb) * (ra + rb); //QƓa̘âQr
    }
    //`揈̃I[oCh
    protected override void OnPaint(PaintEventArgs e) { 
        base.OnPaint(e); //{NX̕`揈Ă
        e.Graphics.DrawImage(backi, 0, backy); //wi摜`
        e.Graphics.DrawImage(backi, 0, backy - backi.Height); //wi摜`
        if (gamemode == 0) { //X^[gʁH
            e.Graphics.DrawString("GAME1", fontt, brushs, 100, 150); //^Cg\
            e.Graphics.DrawString("Hit Enter Key", fontm, brushs, 200, 300); //bZ[W\
        } else if (gamemode == 1) { //vCʁH
            string s = String.Format("SCORE:{0:000,000}", score); //XRA
            e.Graphics.DrawString(s, font1, brushs, 400, 10); //XRA\
            switch (player.hv) { //@̌ɂĕ
                case 0:  player.i = playeri; break; //ʏ摜ɂ
                case -1: player.i = playerl; break; //摜ɂ
                case 1:  player.i = playerr; break; //E摜ɂ
            }
            DrawItem(e, player); //@`
            foreach (var pb in pba) { //SeɂČJԂ
                if (pb.v == 1) { //eH
                    DrawItem(e, pb); //e`
                }
            }
            foreach (var enemy in enemya) { //SG@ɂČJԂ
                if (enemy.v == 1) { //G@H
                    DrawItem(e, enemy); //G@`
                }
            }
        }

    }
    //L[͎
    void OnKeyDown(object o, KeyEventArgs e) { 
        if (e.KeyCode.ToString() == "Escape") { //EscL[Ă
            Close(); //tH[I
        }
        //^CgʂEnterL[Ă
        if (gamemode == 0 && e.KeyCode.ToString() == "Return") { 
            gamemode = 1; //vCɑJ
            timer.Start(); //^C}[Jn
        }
        Invalidate(); //ʍĕ`˗
    }
    //^C}[Cxg
    void Play(object o, EventArgs e) { 
        backy = (backy + 1) % backi.Height; //1ڂ̔wi`JnYW
        player.hv = 0; //@̌𖳂ɂĂ
        if (player.x > playeri.Width / 2 && GetKeyState((int)Keys.Left) < 0) { //͈͓ŁL[ĂH
            player.x -= 10; //@
            player.hv = -1; //
        }
        if (player.x < backi.Width - playeri.Width / 2 && GetKeyState((int)Keys.Right) < 0) { //͈͓ŁL[ĂH
            player.x += 10; //@E
            player.hv = 1; //E
        }
        for (int i = 0; i < maxenemy; i++) { //yȉǉzSG@ɂČJԂ
            if (enemya[i].v != 0) { //G@݁H
                for (int j = 0; j < maxpb; j++) { //SeɂČJԂ
                    if (pba[j].v != 0 && isHit(enemya[i], pba[j])) { //e݂ՓˁH
                        enemya[i].v = 0; //̓G@
                        pba[j].v = 0;  //̎e
                        break; //̓G@֐i
                    }
                }
            }
        }
        if (GetKeyState((int)Keys.Space) < 0) { //Xy[XL[ĂH
            if (waitpb <= 0) { //eˑ҂Ԃ[H
                for (int i = 0; i < maxpb; i++) { //SeɂČJԂ
                    if (pba[i].v == 0) { //e\H
                        pba[i].v = 1; //\ɂ
                        pba[i].i = bulleti; //摜
                        pba[i].x = player.x; //XW͎@Ɠ
                        pba[i].y = player.y - player.i.Height / 2 - pba[i].i.Height / 2; //YW͎@̒
                        pba[i].vv = -5; //ړx
                        waitpb = cold; //eˑ҂ԂZbg
                        break; //1˂łOK
                    }
                }
            }
        } else { //Xy[XL[ĂȂH
            waitpb = 0; //eˑ҂Ԃ[ɂĔˉ\ɂ
        }
        if (waitenemy <= 0) { //G@o҂Ԃ[H
            for (int i = 0; i < maxenemy; i++) { //SG@ɂČJԂ
                if (enemya[i].v == 0) { //G@\H
                    enemya[i].v = 1; //\ɂ
                    enemya[i].i = enemyi; //摜
                    enemya[i].x = player.x; //XW͎@Ɠ
                    enemya[i].y = -enemyi.Height; //YW͏[̒
                    enemya[i].vv = 5; //ړx
                    waitenemy = enemyint; //eˑ҂ԂZbg
                    break; //1@ołOK
                }
            }
        }
        for (int i = 0; i < maxpb; i++) { //SeɂČJԂ
            if (pba[i].v != 0) { //e݁H
                pba[i].i = (pba[i].i == bulleti) ? bullet2i : bulleti; //摜ݕύX
                pba[i].y += pba[i].vv; //ֈړ
                if (pba[i].y + pba[i].i.Height / 2 < 0) { //ʏ[ɏo
                    pba[i].v = 0; //e
                }
            }
        }
        for (int i = 0; i < maxenemy; i++) { //SG@ɂČJԂ
            if (enemya[i].v != 0) { //G@݁H
                enemya[i].y += enemya[i].vv; //ֈړ
                if (enemya[i].y - enemya[i].i.Height / 2 > backi.Height) { //ʉ[艺ɏo
                    enemya[i].v = 0; //G@
                }
            }
        }
        if (waitpb > 0) { //eˑ҂ԂZbgĂ
            waitpb--; //JEg_E
        }
        if (waitenemy > 0) { //G@o҂ԂZbgĂ
            waitenemy--; //JEg_E
        }
        Invalidate(); //ʍĕ`˗
    }
    //RXgN^
    Program() { 
        DoubleBuffered = true; //_uobt@OL
        KeyDown += new KeyEventHandler(OnKeyDown); //L[̓Cxgo^
        timer.Tick += new EventHandler(Play); //^C}[Cxgo^
        timer.Interval = 10; //^C}[C^[o(~b)
        player.i = playeri;  //@̉摜
        player.x = 320; //@̒SXW
        player.y = 410; //@̒SYW
        player.hv = 0;  //@̍Ȇx
    }
    public static void Main() {
        Program f = new Program(); //̃IuWFNg𐶐
        f.Size = new Size(660, 520); //tH[̃TCYݒ
        f.Text = "Game"; //tH[ݒ
        f.ControlBox = false; //Rg[{bNX\
        f.FormBorderStyle = FormBorderStyle.Fixed3D; //TCYύX}~
        Application.Run(f); //tH[o
    }
}

K34 @ƓG@̏Փ˔ƃQ[I[o[

E@ƓG@Փ˂玩@Ƃ̓G@
EāAQ[I[o[ƂAQ[I[o[ʂɑJڂ悤
EQ[I[o[ʂłwĩXN[G@̏o͑̂Ƃ
EA@̈ړ⎩e̔˂͂łȂ悤ɂ
EEnterL[ꂽAvCł悤ɂ悤

oFK33iłOKj

Q[JK\F@ƓG@̏Փ˔ƃQ[I[o[ 
