コード例 #1
0
ファイル: Form1.cs プロジェクト: r1ne/ping-pong
        /// <summary>
        /// Конструктор для бота
        /// </summary>
        /// <param name="difficulty">Определяет, как быстро будет перемещаться ракетка бота, и, как далеко она видит. Может принимать значения от 1 до 11 (11 — имбобот).</param>
        /// <param name="controlledRacket">Какую ракетку будет контролировать бот</param>
        /// <param name="ball">Ссылка на объект-мяч</param>
        public AI(Form owner, int difficulty, racket controlledRacket, ball ball)
        {
            //копируем аргументы в локальные переменные
            this.difficulty = difficulty;
            racket          = controlledRacket;
            this.owner      = owner;
            this.ball       = ball;

            if (difficulty <= 10)
            {
                //объявляем таймер, который будет управлять ракеткой бота, и запускаем его
                Timer aiTimer = new Timer();
                if (difficulty != 0)
                {
                    aiTimer.Interval = 10;
                }
                aiTimer.Tick += new EventHandler(aiTimer_Tick);
                aiTimer.Start();
            }
            else
            {
                racket.Height = owner.ClientSize.Height - 24;
                racket.Top    = 12;
            }
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: r1ne/ping-pong
        public mpClient(Form1 Owner, racket Racket, racket YourRacket, ball Ball, Label Score)
        {
            ball       = Ball;
            owner      = Owner;
            racket     = Racket;
            score      = Score;
            yourRacket = YourRacket;

            receiveTimer.Interval = 1;
            receiveTimer.Start();
            receiveTimer.Tick += new System.EventHandler(receive_Tick);
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: r1ne/ping-pong
        public mpServer(Form1 Owner, racket Racket, racket YourRacket, ball Ball, Label Score)
        {
            racket     = Racket;
            ball       = Ball;
            score      = Score;
            yourRacket = YourRacket;

            owner = Owner;

            receiveTimer.Interval = 10;
            receiveTimer.Start();
            receiveTimer.Tick += new System.EventHandler(receive_Tick);

            sendSnapshot();
        }
コード例 #4
0
ファイル: Form1.cs プロジェクト: r1ne/ping-pong
        public playerRacket(Form owner, racket Racket)
        {
            left  = Racket.getOrientation();
            speed = Settings.Rackets.speed;
            fUp   = Settings.Rackets.fUp;
            fDown = Settings.Rackets.fDown;
            sUp   = Settings.Rackets.sUp;
            sDown = Settings.Rackets.sDown;

            this.owner = owner;
            racket     = Racket;

            tmrRacketUp.Interval = 10;
            tmrRacketUp.Tick    += new System.EventHandler(tmrRacketUp_Tick);

            tmrRacketDown.Interval = 10;
            tmrRacketDown.Tick    += new System.EventHandler(tmrRacketDown_Tick);

            owner.KeyDown += new System.Windows.Forms.KeyEventHandler(Form1_KeyDown);
            owner.KeyUp   += new System.Windows.Forms.KeyEventHandler(Form1_KeyUp);
        }
コード例 #5
0
ファイル: Form1.cs プロジェクト: r1ne/ping-pong
        // { что-то непостижимо непонятное
        public Form1()
        {
            InitializeComponent();

            rendering = new Rendering(this);


            this.Width  = Settings.Window.width;
            this.Height = Settings.Window.height;

            ball = new ball();


            score.Left = Convert.ToInt32((this.Width - score.Width) / 2);
            score.Top  = ClientSize.Height - score.Height - 10;

            racket_1 = new racket(this, true);
            racket_2 = new racket(this, false);

            switch (dataTransfer.gameType)
            {
            case 0:     //vs AI
                if (dataTransfer.aiDifficulty == 11)
                {
                    score.Text = "0";
                    score.Left = Convert.ToInt32((this.Width - score.Width) / 2);
                }

                new AI(this, dataTransfer.aiDifficulty, racket_1, ball);
                new playerRacket(this, racket_2);
                break;

            case 1:     //hotseat
                new playerRacket(this, racket_1);
                new playerRacket(this, racket_2);
                break;

            case 2:     //multiplayer
                if (dataTransfer.typeOfNet == "server")
                {
                    mp = new mpServer(this, racket_2, racket_1, ball, score);
                    new playerRacket(this, racket_1);
                }
                else
                {
                    mp = new mpClient(this, racket_1, racket_2, ball, score);
                    new playerRacket(this, racket_2);
                }
                break;

            case 3:     //screensaver
                new AI(this, 9, racket_1, ball);
                new AI(this, 9, racket_2, ball);
                break;
            }

            // инициализураыфвфыпкуопгзем основной таймер, отвечающий за передвижение квадрата-мяча
            timer.Tick    += new EventHandler(timer_Tick);
            timer.Interval = 10;
            timer.Start();

            //
            if (dataTransfer.typeOfNet != "client")
            {
                bonusTimer.Tick    += new EventHandler(bonusTimer_Tick);
                bonusTimer.Interval = 1000;
                bonusTimer.Start();

                sinTimer.Tick    += new EventHandler(sinTimer_Tick);
                sinTimer.Interval = 100;
            }

            bonusCloseTimer.Tick    += new EventHandler(bonusCloseTimer_Tick);
            bonusCloseTimer.Interval = 1000;
            bonusCloseTimer.Start();


            // настраиваем физику
            physX.currPower = 5;  // скорость (она же — сила пинка по мячику) передвижения
            if (rnd.Next(2) == 0) // начальный угол перемещения мячика в градусах (0 — вправо, 90 — вверх и т.д.)
            {
                physX.deltaAngle = -60 + rnd.Next(120);
            }
            else
            {
                physX.deltaAngle = 120 + rnd.Next(120);
            }

            physX.getProjection();   //фигачим проекцию на оси Хэ и Угрик.
            //в данной программе:
            //проекция — кол-во пикселей, на которое переместится мяч за один ход/тик/иличтотамещёунас
        }