{"id":12065,"date":"2017-04-28T00:00:00","date_gmt":"2017-04-27T16:00:00","guid":{"rendered":"https:\/\/fgchen.com\/wpedu2\/2017\/04\/28\/%e3%80%90%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e3%80%91%e4%b9%92%e4%b9%93%e9%81%8a%e6%88%b2\/"},"modified":"2026-03-30T14:49:28","modified_gmt":"2026-03-30T06:49:28","slug":"%e3%80%90%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e3%80%91%e4%b9%92%e4%b9%93%e9%81%8a%e6%88%b2","status":"publish","type":"post","link":"https:\/\/fgchen.com\/wpedu\/2017\/04\/%e3%80%90%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e3%80%91%e4%b9%92%e4%b9%93%e9%81%8a%e6%88%b2\/","title":{"rendered":"\u3010\u7a0b\u5f0f\u8a2d\u8a08-C#\u3011\u4e52\u4e53\u904a\u6232"},"content":{"rendered":"\n\n<span style=\"font-size: 14pt\"><strong>\u3010\u91cd\u9ede1\u3011\u7403\u7684\u79fb\u52d5<\/strong><\/span>\n<span style=\"font-size: 14pt\"><strong>\u3010\u91cd\u9ede2\u3011\u7403\u62cd\u7684\u79fb\u52d5<\/strong><\/span>\n<span style=\"font-size: 14pt\"><strong>\u3010\u91cd\u9ede3\u3011\u6e2c\u5b9a\u7403\u78b0\u89f8\u908a\u754c<\/strong><\/span>\n<span style=\"font-size: 14pt\"><strong>\u3010\u91cd\u9ede4\u3011\u6e2c\u5b9a\u7403\u62cd\u662f\u5426\u64ca\u4e2d\u7403\uff0c\u6c92\u64ca\u4e2d\u7684\u8a71\u2026<\/strong><\/span>\n&nbsp;\n<a href=\"http:\/\/www.fgchen.com\/wp\/%e3%80%90%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e3%80%91%e4%b9%92%e4%b9%93%e9%81%8a%e6%88%b2\/pingpong-game-diagram\/\" rel=\"attachment wp-att-4977\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-4977 aligncenter\" src=\"http:\/\/www.fgchen.com\/wp\/wp-content\/uploads\/2017\/04\/PingPong-Game-Diagram.png\" alt=\"\" width=\"711\" height=\"495\" \/><\/a>\n\u7a0b\u5f0f\u5229\u7528\u8a08\u6642\u5668(timer1)\uff0c\u6bcf\u9694\u4e00\u6bb5\u6642\u9593\u57f7\u884c\u5e7e\u4ef6\u5de5\u4f5c\uff1a\n1\uff0e\u4f9d\u64da\u76ee\u524d\u6e38\u6a19(Cursor)\u7684\u4f4d\u7f6e\u4f86\u79fb\u52d5\u7403\u62cd(racket)\n2\uff0e\u5c07\u7403(ball)\u7684\u4f4d\u7f6e(left, top)\u5404\u52a0\u4e0a(speed_left, speed_top)\uff0cleft\u662f\u6c34\u5e73\u65b9\u5411(\u5de6\u53f3)\uff0ctop\u662f\u5782\u76f4\u65b9\u5411(\u4e0a\u4e0b)\n3\uff0e\u5224\u65b7\u7403\u62cd\u662f\u5426\u64ca\u4e2d\u7403(\u4e5f\u5c31\u662f\u8aaaball\u7684left, bottom, top, right\u662f\u5426\u843d\u65bcracket\u7684left, bottom, top, right\u5167)\n\n<p style=\"padding-left: 30px\">\u82e5\u662f\u7684\u8a71\uff0c\u6539\u8b8a\u7403\u5f80\u4e0b\u7684\u65b9\u5411\uff0c\u8b8a\u6210\u5f80\u4e0a\u7684\u65b9\u5411<\/p>\n\n<p style=\"padding-left: 30px\">\u6539\u8b8a\u7403\u79fb\u52d5\u901f\u5ea6\uff0c\u4e5f\u5c31\u662f\u589e\u52a0speed_left, speed_top\uff0c\u8b93\u7403\u79fb\u52d5\u7684\u8ddd\u96e2\u589e\u52a0<\/p>\n\n<p style=\"padding-left: 30px\">\u5f97\u5206+1\uff0c\u66f4\u65b0\u8a08\u5206\u7248<\/p>\n\n4\uff0e\u5224\u65b7\u7403\u662f\u5426\u78b0\u5230\u53f3\u3001\u5de6\u3001\u4e0a\u908a\u754c\uff0c\u662f\u7684\u8a71\uff0c\u6539\u8b8a\u65b9\u5411\uff0c\u5de6\u8b8a\u53f3\uff0c\u53f3\u8b8a\u5de6\uff0c\u4e0a\u8b8a\u4e0b\n5\uff0e\u82e5\u7403\u8d85\u51fa\u4e0b\u908a\u754c\uff0c\u904a\u6232\u4e2d\u6b62\uff0c\u8df3\u51fa\u8a0a\u606f\u8996\u7a97\n<span style=\"font-size: 14pt\"><strong>\u672a\u4f86\u52a0\u4e0a\u5e7e\u500b\u7279\u6027\uff1a\u52a0\u4e0a\u80cc\u666f\u97f3\u6a02 (<a href=\"http:\/\/wp.me\/p7SbsS-1ik\" target=\"_blank\" rel=\"noopener noreferrer\">\u53c3\u8003\u8cc7\u6599<\/a>)\u3001\u80cc\u666f\u8272\u8b8a\u63db\u3001\u96a8\u6a5f\u8b8a\u63db\u7403\u79fb\u52d5\u7684\u901f\u5ea6\u2026<\/strong><\/span>\n<span style=\"font-size: 18pt\"><strong>\u3010V 1.1 \u5e73\u6ed1\u7248\u3011\u3010\u5c08\u6848\u6a94\u4e0b\u8f09\uff1a<a href=\"http:\/\/www.fgchen.com\/wp\/%e3%80%90%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e3%80%91%e4%b9%92%e4%b9%93%e9%81%8a%e6%88%b2\/pingpong-smooth\/\" rel=\"attachment wp-att-5039\">PingPong-smooth<\/a>\u3011<\/strong><\/span>\n\n<pre class=\"theme:vs2012 lang:c# decode:true  \">using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing System.Media;\nnamespace PingPong\n{\n    public partial class playground : Form\n    {\n        int speed_left = 5; \/\/\u7403\u7684\u6c34\u5e73\u8b8a\u63db\u901f\u5ea6\n        int speed_top = 5; \/\/\u7403\u7684\u5782\u76f4\u8b8a\u63db\u901f\u5ea6\n        int point = 0; \/\/\u5f97\u5206\n        int ball_Left = 50, ball_Top = 50, ball_Width = 48, ball_Height = 48;\n        int racket_Left = 0, racket_Top = 0, racket_Width = 150, racket_Height = 20;\n        Bitmap bmp = new Bitmap(\"mushroom.png\");\n        private SoundPlayer player;\n        public playground()\n        {\n            InitializeComponent();\n            player = new SoundPlayer(@\"C:audio_output2.wav\");\n            player.PlayLooping(); \/\/\u80cc\u666f\u97f3\u6a02\n            timer1.Enabled = true; \/\/\u555f\u52d5\u8a08\u6642\u56681\n            Cursor.Hide(); \/\/\u5c07\u6e38\u6a19\u96b1\u85cf\u8d77\u4f86\n            this.FormBorderStyle = FormBorderStyle.None; \/\/\u5c07\u8996\u7a97\u7684\u908a\u6846\u8a2d\u6210\"\u7121\"\uff0c\u4f7f\u8996\u7a97\u7684\u908a\u6846(\u9023\u540c\u6a19\u984c\u5217)\u6d88\u5931\n            this.TopMost = true; \/\/\u5c07\u8996\u7a97\u8a2d\u70ba\u6700\u4e0a\u5c64\n            this.Bounds = Screen.PrimaryScreen.Bounds; \/\/\u5c07\u8996\u7a97\u8a2d\u70ba\u5168\u87a2\u5e55\n            racket_Top = this.Bottom - (this.Bottom \/ 10); \/\/\u8a2d\u5b9a\u7403\u62cd\u7684\u5782\u76f4\u4f4d\u7f6e\n            lblGameOver.Top = (this.Height \/ 2) - (lblGameOver.Height \/ 2); \/\/\u7f6e\u4e2d\u904a\u6232\u7d50\u675f\u7684\u8a0a\u606f\u6587\u5b57\n            lblGameOver.Left = (this.Width \/ 2) - (lblGameOver.Width \/ 2);\n        }\n        private void playBom() \/\/\u64ad\u653e\u649e\u58c1\u6642\u7684\u97f3\u6a02\u526f\u7a0b\u5f0f\n        {\n            var player1 = new WMPLib.WindowsMediaPlayer();\n            player1.URL = @\"C:audio_output1.wav\"; \/\/\u649e\u64ca\u8072\n        }\n        private void timer1_Tick(object sender, EventArgs e) \/\/\u8a08\u6642\u56681\u7684\u8df3\u52d5\u4e8b\u4ef6\n        {\n            racket_Left = Cursor.Position.X - (racket_Width \/ 2); \/\/\u5c07\u7403\u62cd\u7684\u4e2d\u5fc3\u4f4d\u7f6e \u8a2d\u70ba \u6e38\u6a19\u7684\u6c34\u5e73\u4f4d\u7f6e\n            ball_Left += speed_left; \/\/\u79fb\u52d5\u7403-\u6c34\u5e73\n            ball_Top += speed_top; \/\/\u79fb\u52d5\u7403-\u5782\u76f4\n            if ((ball_Top + ball_Height) &gt;= racket_Top &amp;&amp; ball_Left &gt;= racket_Left) \/\/\u5224\u65b7\u7403\u62cd\u662f\u5426\u64ca\u4e2d\u7403\n            {\n                Random rnd = new Random();\n                int r = rnd.Next(1, 10);\n                if (speed_top &gt;= 0) speed_top += r; \/\/\u52a0\u901f\n                else speed_top -= r;\n                if (speed_left &gt;= 0) speed_left += r;\n                else speed_left -= r;\n                speed_top = -speed_top; \/\/\u6539\u8b8a\u7403\u7684\u79fb\u52d5\u65b9\u5411\n                point += 1; \/\/\u5f97\u5206+1\n                lblPoints.Text = point.ToString();\n                playBom();\n            }\n            if (ball_Left &lt;= this.Left)\n            {\n                speed_left = -speed_left; \/\/\u82e5\u7403\u7684\u5de6\u908a\u7de3\u5728\u5de6\u908a\u754c\u7684\u5de6\u908a\uff0c\u8b8a\u63db\u6c34\u5e73\u79fb\u52d5\u7684\u65b9\u5411\n                playBom();\n            }\n            if (( ball_Left+ball_Width) &gt;= this.Right)\n            {\n                speed_left = -speed_left;\n                playBom();\n            }\n            if (ball_Top &lt;= this.Top)\n            {\n                speed_top = -speed_top; \/\/\u7403\u8d85\u51fa\u4e0a\u908a\u754c\u2026\n                playBom();\n            }\n                if ((ball_Top + ball_Height) &gt;= this.Bottom)  \/\/\u7403\u51fa\u754c\uff0c\u904a\u6232\u7d50\u675f\n            {\n                timer1.Enabled = false; \/\/\u4e2d\u6b62\u8a08\u6642\u56681\n                lblGameOver.Visible = true; \/\/\u986f\u793a\u51fa\u904a\u6232\u7d50\u675f\u8a0a\u606f\n            }\n            Invalidate();\n        }\n        private void PingPong_KeyDown(object sender, KeyEventArgs e) \/\/\u7576\u6309\u4e0b\u6309\u9375\u6642\u2026\n        {\n            if (e.KeyCode == Keys.Escape) this.Close(); \/\/\u6309Esc\u96e2\u958b\u904a\u6232\n            if (e.KeyCode == Keys.F1) \/\/\u91cd\u65b0\u958b\u59cb\u904a\u6232\n            {\n                ball_Top = 50;\n                ball_Left = 50;\n                speed_left = 5;\n                speed_top = 5;\n                point = 0;\n                lblPoints.Text = \"0\";\n                timer1.Enabled = true;\n                lblGameOver.Visible = false;\n            }\n        }\n        private void playground_Paint(object sender, PaintEventArgs e)\n        {\n            e.Graphics.FillRectangle(Brushes.BlueViolet, racket_Left, racket_Top, racket_Width, racket_Height);\n            e.Graphics.DrawImage(bmp, ball_Left, ball_Top, 64, 64);\n        }\n    }\n}<\/pre>\n\n<span style=\"font-size: 18pt\"><strong>\u3010V 1.0\u3011\u3010\u5c08\u6848\u6a94\u4e0b\u8f09\uff1a\u00a0<a href=\"http:\/\/www.fgchen.com\/wp\/%e3%80%90%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e3%80%91%e4%b9%92%e4%b9%93%e9%81%8a%e6%88%b2\/pingpong\/\" rel=\"attachment wp-att-4946\">PingPong<\/a>\u3011<\/strong><\/span>\n\n<pre class=\"theme:vs2012 lang:c# decode:true\">using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nnamespace PingPong\n{\n    public partial class PingPong : Form\n    {\n        public int speed_left = 5; \/\/\u7403\u7684\u6c34\u5e73\u8b8a\u63db\u901f\u5ea6\n        public int speed_top = 5; \/\/\u7403\u7684\u5782\u76f4\u8b8a\u63db\u901f\u5ea6\n        public int point = 0; \/\/\u5f97\u5206\n        public PingPong()\n        {\n            InitializeComponent();\n            timer1.Enabled = true; \/\/\u555f\u52d5\u8a08\u6642\u56681\n            Cursor.Hide(); \/\/\u5c07\u6e38\u6a19\u96b1\u85cf\u8d77\u4f86\n            this.FormBorderStyle = FormBorderStyle.None; \/\/\u5c07\u8996\u7a97\u7684\u908a\u6846\u8a2d\u6210\"\u7121\"\uff0c\u4f7f\u8996\u7a97\u7684\u908a\u6846(\u9023\u540c\u6a19\u984c\u5217)\u6d88\u5931\n            this.TopMost = true; \/\/\u5c07\u8996\u7a97\u8a2d\u70ba\u6700\u4e0a\u5c64\n            this.Bounds = Screen.PrimaryScreen.Bounds; \/\/\u5c07\u8996\u7a97\u8a2d\u70ba\u5168\u87a2\u5e55\n            racket.Top = playground.Bottom - (playground.Bottom \/ 10); \/\/\u8a2d\u5b9a\u7403\u62cd\u7684\u5782\u76f4\u4f4d\u7f6e\n            lblGameOver.Top = (playground.Height \/ 2) - (lblGameOver.Height \/ 2); \/\/\u7f6e\u4e2d\u904a\u6232\u7d50\u675f\u7684\u8a0a\u606f\u6587\u5b57\n            lblGameOver.Left = (playground.Width \/ 2) - (lblGameOver.Width \/ 2);\n        }\n        private void timer1_Tick(object sender, EventArgs e) \/\/\u8a08\u6642\u56681\u7684\u8df3\u52d5\u4e8b\u4ef6\n        {\n            racket.Left = Cursor.Position.X - (racket.Width \/ 2); \/\/\u5c07\u7403\u62cd\u7684\u4e2d\u5fc3\u4f4d\u7f6e \u8a2d\u70ba \u6e38\u6a19\u7684\u6c34\u5e73\u4f4d\u7f6e\n            ball.Left += speed_left; \/\/\u79fb\u52d5\u7403-\u6c34\u5e73\n            ball.Top += speed_top; \/\/\u79fb\u52d5\u7403-\u5782\u76f4\n            if (ball.Top &lt;= racket.Top &amp;&amp; ball.Bottom &gt;= racket.Bottom &amp;&amp; ball.Left &gt;= racket.Left &amp;&amp; ball.Right &lt;= racket.Right) \/\/\u5224\u65b7\u7403\u62cd\u662f\u5426\u64ca\u4e2d\u7403\n            {\n                speed_top += 2; \/\/\u52a0\u901f\n                speed_left += 2;\n                speed_top = -speed_top; \/\/\u6539\u8b8a\u7403\u7684\u79fb\u52d5\u65b9\u5411\n                point += 1; \/\/\u5f97\u5206+1\n                lblPoints.Text = point.ToString();\n            }\n            if (ball.Left &lt;= playground.Left) speed_left = -speed_left; \/\/\u82e5\u7403\u7684\u5de6\u908a\u7de3\u5728\u5de6\u908a\u754c\u7684\u5de6\u908a\uff0c\u8b8a\u63db\u6c34\u5e73\u79fb\u52d5\u7684\u65b9\u5411\n            if (ball.Right &gt;= playground.Right) speed_left = -speed_left;\n            if (ball.Top &lt;= playground.Top) speed_top = -speed_top; \/\/\u7403\u8d85\u51fa\u4e0a\u908a\u754c\u2026\n            if (ball.Bottom &gt;= playground.Bottom)  \/\/\u7403\u51fa\u754c\uff0c\u904a\u6232\u7d50\u675f\n            {\n                timer1.Enabled = false; \/\/\u4e2d\u6b62\u8a08\u6642\u56681\n                lblGameOver.Visible = true; \/\/\u986f\u793a\u51fa\u904a\u6232\u7d50\u675f\u8a0a\u606f\n            }\n        }\n        private void PingPong_KeyDown(object sender, KeyEventArgs e) \/\/\u7576\u6309\u4e0b\u6309\u9375\u6642\u2026\n        {\n            if (e.KeyCode == Keys.Escape) this.Close(); \/\/\u6309Esc\u96e2\u958b\u904a\u6232\n            if (e.KeyCode == Keys.F1) \/\/\u91cd\u65b0\u958b\u59cb\u904a\u6232\n            {\n                ball.Top = 50;\n                ball.Left = 50;\n                speed_left = 5;\n                speed_top = 5;\n                point = 0;\n                lblPoints.Text = \"0\";\n                timer1.Enabled = true;\n                lblGameOver.Visible = false;\n            }\n        }\n    }\n}\n<\/pre>\n\n&nbsp;\n&nbsp;\n<span style=\"font-size: 18pt\"><strong>\u3010Another \u4e52\u4e53\u904a\u6232\u3011<\/strong><\/span>\n<a href=\"http:\/\/www.fgchen.com\/wp\/%e3%80%90%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e3%80%91%e4%b9%92%e4%b9%93%e9%81%8a%e6%88%b2\/pingponggame-2\/\" rel=\"attachment wp-att-4953\"><img decoding=\"async\" class=\"alignnone size-full wp-image-4953\" src=\"http:\/\/www.fgchen.com\/wp\/wp-content\/uploads\/2017\/04\/PingPongGame-2.png\" alt=\"\" width=\"434\" height=\"259\" \/><\/a>\n<a href=\"http:\/\/www.fgchen.com\/wp\/%e3%80%90%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e3%80%91%e4%b9%92%e4%b9%93%e9%81%8a%e6%88%b2\/pingpong-2\/\" rel=\"attachment wp-att-4952\">Pingpong-2<\/a>","protected":false},"excerpt":{"rendered":"<p>\u3010\u91cd\u9ede1\u3011\u7403\u7684\u79fb\u52d5 \u3010\u91cd\u9ede2\u3011\u7403\u62cd\u7684\u79fb\u52d5 \u3010\u91cd\u9ede3\u3011\u6e2c\u5b9a\u7403\u78b0\u89f8\u908a\u754c \u3010\u91cd\u9ede4\u3011\u6e2c &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[266],"tags":[94,93,136,137],"class_list":["post-12065","post","type-post","status-publish","format-standard","hentry","category-266","tag-c-sharp","tag-c","tag-game-programing","tag-137"],"_links":{"self":[{"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/posts\/12065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/comments?post=12065"}],"version-history":[{"count":1,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/posts\/12065\/revisions"}],"predecessor-version":[{"id":13375,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/posts\/12065\/revisions\/13375"}],"wp:attachment":[{"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/media?parent=12065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/categories?post=12065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/tags?post=12065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}