ソケットとP2Pのない学校の楽しみまたはマルチプレイヤーゲーム

こんにちは、ホーカーズ!



この記事はただの楽しみのために作成されたものであり、いかなる教育財産のふりもしないことをすぐに予約したいと思います。



私たちの学校では、彼らは6年生からコンピューターサイエンスを教えていますが、実際には何も教えられていません。これは、Wordのテキストを友好的で勤勉な方法でフォーマットしたため、9年生でのみ勉強を終えたためです。 少し退屈で、プログラミングを始めました。 「Hello、World!」をC ++の本からコピーしたことを覚えています。最初の電卓、次に別の電卓、ActionScriptを学び、気味の悪いゲームをいくつか作成してから、怠け者になりました。

Excelでの退屈な作業の後、友人と私は長年のアイデアであるマルチプレイヤーゲームを作成することを実現することにしました。 学校のコンピューターにはMacromedia Flash 8、Borland Delphi 7、クラスの反対側のモニターにはWindows Server 2003のロゴが映っていました。



最初の試み...



...そして最初の失敗。 Delphiのサーバーソケットの標準コンポーネントを使用しようとしましたが、ここではプログラミングの小さな経験が影響し、接続することさえできませんでした。 インターネット上で起こりうる問題を検索しても役に立たなかった- 役に立たないインターネット検閲がひどく干渉した。 必死になって、私たちはすでにベンチャーを辞めることを考えていましたが、突然、友人に奇妙な考えが生じました。 最初、私は彼を狂ったように見て、それから彼のアイデアに何かがあることに気づきました。



その結果、サーバーから親切に提供された共有ディスクにテキストファイルを配置し、何が起こるかを確認することに同意しました。



言語選択



私はこれを非常に重要視しましたが、選択は非常に小さく、古いActionScript、Delphi、またはPascalです。 Flashを守るために、私は一生懸命ファイルを読み込もうとしましたが、(やはり、経験が浅いため)テキストファイルを開きたくありませんでした。 長い間、私はびっくりし、落ち着いて、何が悪いのか考えましたが、何の役にも立ちませんでした。 最後に、私はこのビジネスを辞め、再び幸せそうな顔でExcelを始めました。



約4分の1の後、無料のレッスンがありました-教師はいませんでした。 コンピューターの前に座ってTurbo Pascalを開き、「WinApiで何か」を書くことにしました。 ヘルプを調べたところ、 SetCursorPos()GetCursorPos()などが見つかりました。 ずるい表現で、2台のコンピューターでマウスカーソルを同期するプログラムを作成しました。 次のように起こりました。

画像



「眠りに落ちる」ために松葉杖を使用:



while (true) do begin /*  /      SetCursorPos()*/ delay:=0; while delay<10 do delay:=delay+0.00001; end;
      
      







不明な理由により、スリープ機能は機能せず、コンピューターに不必要な計算をロードする必要がありました。



他のコンピューターのカーソルがマウスの助けを借りずに動くとき、私たちの喜びを伝えることは不可能です! ソースはここにあります 。 インスピレーションを得て、ピンポンの作成に取りかかりました。



実際には、作成



それで、私たちは、小さくても人生を肯定するWin'omに触発されて、ピンポンを作成し始めました。 ウェッジは視覚化の問題でした。 文字の2次元配列を使用することにしました。この場合、フィールドにはスペースが入り、いくつかの文字が含まれます。 '-プレーヤーと「ボール」。 プログラムが登場しました3-最初のプレーヤーを制御し、2番目のプレーヤーを制御し、ボールとその物理を制御します。



運営管理


管理は、同じGetCursorPos()を使用して、マウスで実行されます。 最初に遭遇した問題は、「グリッド」配列に対するカーソルの座標のスケーリングでした。 グリッドに70x24の属性がある場合、学校は1024x640の解像度で監視しますが、これはそれ以上です。 「グリッド」とモニターの属性の比率を学習し、マウスの座標を結果の比率で除算しました。



 getCursorPos(cursorPos); py := cursorPos.y div 20; if(py > h - 5) then py := h - 5; if(py < 1) then py := 1;
      
      







この場合、比率は20になりました。また、配列の座標を超えてカーソルの出口をブロックします(hはフィールドの高さ、5はプレーヤーの高さです)。



ボール物理学


上で述べたように、ボールの物理学はすべて別のプログラムで計算されます。 物理学は単純です-ボールがフィールドの境界に到達するか、プレーヤーと衝突すると、その速度ベクトルは反対に変わります。 ゲームプレイに少なくともある程度の興味を持たせるためにプレイヤーとの衝突で、ボールの速度を上げます。 ボールがアレイを離れるとき、フィールドの中心にボールを置き、ランダムな速度を付加します。 ボールでよくやった。



同期する


おそらく、このゲームで最も面白いのは同期です。 3つのテキストファイルがあります: ball.txtplayer_1.txtおよびplayer_2.txt 。 ボールの座標はball.txtに記録され、プレーヤーの上部の境界線はプレーヤーのファイルに書き込まれます。 各ファイルは、同時に3つのプログラムによって同時に開かれたままになり、ゲームプロセス全体の速度が大幅に低下します。 それにもかかわらず、重大な遅れは見つかりませんでした。



このf話の教訓...



...明らかです。 何もする必要がない場合は、このようなナンセンスを作成することもできます。 そして、私たちが費やした時間は完全に無駄ではないと言うことができます-あなたが不器用で愚かではあるが、あなた自身のゲームをプレイするとき...感情を伝えることは不可能です。 もちろん、私たちは最も普通のシュコロロであり、すべてを賞賛します(私たちが独自の方法で「Hello World」を賞賛したように)。これは何らかの形でプログラミングに関連しますが、



PSソースはこちらです。 コメントは少ない!



PPS私は完全に忘れていました。 私たちのプログラムは共有フォルダーですぐに開始されたため、テキストファイルと同じフォルダーにあるように設計されています。



All Articles