标题:关于C#多线程程序设计
取消只看楼主
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
结帖率:100%
已结贴  问题点数:100 回复次数:7 
关于C#多线程程序设计
想写个双人坦克小游戏,想要双人玩需要用到多线程,以下是我写的代码,没能实现效果,想请教以下大家哪里错了,先谢谢了。
程序代码:
        Thread thread1, thread2;
        Message m;
        Keys k;
        int x1 = 0, y1 = 0, x2, y2;
        Bitmap pic1 = new Bitmap("C:\\Users\\llq664301573\\Desktop\\res\\己方1上.gif");
        Bitmap pic2 = new Bitmap("C:\\Users\\llq664301573\\Desktop\\res\\己方1下.gif");
        Bitmap pic3 = new Bitmap("C:\\Users\\llq664301573\\Desktop\\res\\己方1左.gif");
        Bitmap pic4 = new Bitmap("C:\\Users\\llq664301573\\Desktop\\res\\己方1右.gif");
        public void func1()
        {
            switch (k)
            {
                case Keys.Up:
                    y1 -= 8;
                    pictureBox1.Top = y1;
                    pictureBox1.Image = pic1;
                    pictureBox1.Width = pic1.Width;
                    pictureBox1.Height = pic1.Height;
                    break;
                case Keys.Down:
                    y1 += 8;
                    pictureBox1.Top = y1;
                    pictureBox1.Image = pic2;
                    pictureBox1.Width = pic2.Width;
                    pictureBox1.Height = pic2.Height;
                    break;
                case Keys.Left:
                    x1 -= 8;
                    pictureBox1.Left = x1;
                    pictureBox1.Image = pic3;
                    pictureBox1.Width = pic3.Width;
                    pictureBox1.Height = pic3.Height;
                    break;
                case Keys.Right:
                    x1 += 8;
                    pictureBox1.Left = x1;
                    pictureBox1.Image = pic4;
                    pictureBox1.Width = pic4.Width;
                    pictureBox1.Height = pic4.Height;
                    break;
                default:
                    break;
            }
            Thread.Sleep(10);
        }
        public void func2()
        {
            switch (k)
            {
                case Keys.W:
                    y2 -= 8;
                    pictureBox2.Top = y2;
                    pictureBox2.Image = pic1;
                    pictureBox2.Width = pic1.Width;
                    pictureBox2.Height = pic1.Height;
                    break;
                case Keys.S:
                    y2 += 8;
                    pictureBox2.Top = y2;
                    pictureBox2.Image = pic2;
                    pictureBox2.Width = pic2.Width;
                    pictureBox2.Height = pic2.Height;
                    break;
                case Keys.A:
                    x2 -= 8;
                    pictureBox2.Left = x2;
                    pictureBox2.Image = pic3;
                    pictureBox2.Width = pic3.Width;
                    pictureBox2.Height = pic3.Height;
                    break;
                case Keys.D:
                    x2 += 8;
                    pictureBox2.Left = x2;
                    pictureBox2.Image = pic4;
                    pictureBox2.Width = pic4.Width;
                    pictureBox2.Height = pic4.Height;
                    break;
                default:
                    break;
            }
            Thread.Sleep(10);
        }
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            m = msg;
            k = keyData;
            thread1 = new Thread(new ThreadStart(func1));//生成线程类对象
            thread1.Start();
            thread2 = new Thread(new ThreadStart(func2));//生成线程类对象
            thread2.Start();
           
            return base.ProcessCmdKey(ref msg, keyData);
        }

搜索更多相关主题的帖子: 小游戏 多线程 
2011-04-03 22:25
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
得分:0 
回复 3楼 flyue
但键盘按键同时按下的话不用多线程貌似不行啊。。。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-03 23:39
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
得分:0 
回复 6楼 flyue
写个程序综合用一下C#而已,可以不把它看成是游戏。
嗯,说的挺有道理的。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-03 23:46
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
得分:0 
以下是引用flyue在2011-4-3 23:49:29的发言:

GetAsyncKeyState这个API函数可以获得当前某个键的状态,最重要的是它为非阻塞函数。
 
使用一个循环,就能把256个键的状态都弄到手。
 
手机打字不便。
那个GetAsyncKeyState函数之前找过,不才不懂得用,谢谢回帖了,不是用手机时麻烦帮我看看那个多线程哪里错了?

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-03 23:53
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
得分:0 
以下是引用flyue在2011-4-4 00:01:43的发言:

每次接受按键消息后,你都创建了2个线程,而且没施放…
 
线程其实是很昂贵的资源,贱卖了
 
不懂C#, 没看出问题
呵呵,以为不需要delete的C#也会自动释放。。。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-04 00:13
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
得分:0 
不过不知道哪里错了,跟没有多线程的效果没有丝毫差别。。。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-04 00:15
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
得分:0 
我指的是直观效果。
那个“效果”确实更差。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-04 00:26
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
得分:0 
以下是引用你们都要疼我哦在2011-4-4 13:55:00的发言:

不会C#,楼主这么快就学这个了。。。。。。
确实不会啊,会的话就不会出现这个问题了,帮忙看下吧,为什么错了?

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-04 14:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-335589-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.157735 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved