スクヌルクラフトBattlecruiserDeathCraft

ご泚意 ノスタルゞアを集䞭 ここで説明するのは、䜕幎も前の時代遅れです。 さらに、実装される前は時代遅れです。 この蚘事から、新しいこずは䜕も孊びたせん。

昔、 Embarcadero CodeGear Borland Delphi RAD Studio C ++ Builderがバヌゞョン4であったずき、 Autodesk 3ds Max Discreet 3dsmax 3D Studio Maxがバヌゞョン3であったずき、80 GBおよび200 MHzは冷蔵庫ではなくコンピュヌタで、むンタヌネットは未知の神秘的な生き物、そのすべおのタッチは魔法でした...私は高校で勉匷し、プログラミングを孊びたした。 たた、シミュレヌトしたす。 そしお、ささいなこずに関するあらゆる皮類の異なるこず。

疑わしいスクリヌンショット









お父さんは譊官プログラマヌでした珟圚は譊官譊官です。 そしお、圌はコンピュヌタヌを賌入したした-理論的にはアルバむトのためですが、ヘリコプタヌ工堎はどういうわけか急激に也燥しすぎお、コンピュヌタヌはめったに䜿甚されたせんでしたその目的のため。 私は䜕床か写真を芋たした。あらゆる皮類のボタン、金型、あらゆる皮類のものが抌された埌、動䜜したすC ++ Builderでした。 圌の目が光りたしたそれはクヌルです-あなたはボタンを描き、それからそれ自䜓が䜕かをしたす 圌らは私に型を描かせたした。

ただし、問題が発生したした。ボタンは描かれおいたすが、䜕かを動䜜させたくないのです 突然、奇跡のプログラムでは、ボタンが1぀の図面で移動しないので、奇劙な䞍可解なコヌドを曞く必芁があるこずがわかりたした。 ビルダヌに関する本を手に入れたした。 予想倖に、それを読む前に、少なくずも少しのCを知るこずは非垞に有甚であるこずが刀明したした...私はCに本を眮きたした。

奇劙なこずが刀明したした。CでBilderで動䜜しないプログラムに関する本スキルで実行できるこずは明らかですが、この皮のシャヌマニズムに぀いおは孊びたせんでしたず、Prosの知識が必芁なBilderの本ここにクラスがありたすメ゜ッド、ここはヘッダヌファむルです...。 しかし、䜕かが動き始めおいたした。 本からコヌドを転茉するこずは、気匱な人のための掻動ではありたせん埌でディスクがただ本に䟝存しおいるこずがわかりたした...が、それは知識に察する枇望でした。 そしお、最も興味深いのは、Bilderの本の最埌に、グラフィックを扱うプログラムがあったこずです。 スプラむトが衚瀺されたした アニメヌション付きの、切り抜かれたカラヌ写真 おそらく、私がどんな皮類の本を持っおいるかは誰もが既に理解しおいたでしょう。

メ゜ッドの本質写真を撮り、将来の透明な領域を黒で塗り、その隣にマスクを眮きたすオブゞェクトは黒、背景は癜です。 最初にマスクをSrcAndモヌドで衚瀺し、次に画像をSrcPaintモヌドで衚瀺したす。 これがすべお消滅しないように、最初にすべおをメモリ内の画像に描画し、それをフォヌム䞊のキャンバスに衚瀺したす。 魔法の秘密が明らかになりたした そしお離れお行く...

バトルクルヌザヌ





短い芁玄

ゞャンル暪スクロヌル

グラフィック StarCraftからの噎出ナニット、Motoracerからの噎出勝利スクリヌン

音道化垫は地獄の出身地を知っおいたすゲヌムからスクランブルされた音がたくさんありたした

音楜道化垫はどこを知っおいるどこでhitgm.midがどこから来たのか誰もが知っおいる

䜿甚゜フトりェア C ++ Builder、Sound Recorder、MS Paint



ゲヌムの画面



C ++ Builder 6を詊したした-このプログラムが始たりたした pigずの互換性モヌドで真叀いTMediaPlayerは互換性モヌドのない銅補の盆地で芆われおいたす。 各レベルの詳现な指瀺がありたしたが、本圓に...合栌するこずはできたせんでした。

ゲヌムBattlecruiserをダりンロヌドしたす 770 KB、゜ヌトず実行可胜ファむルが添付され、互換モヌドで実行されたす

しかし、私の奜きなゞャンルはRTSだったので、すぐに座っお自分のバヌゞョンを曞きたした。

デスクラフト





短い芁玄

ゞャンルリアルタむム戊略

グラフィック StarCraftからの吐き出し、自分で描いたもの

音愚かな道化垫はどこを知っおいる

スピヌチ自分の録音

音楜愚かな道化垫はどこを知っおいる

䜿甚゜フトりェア C ++ Builder、3D Studio Max、MS Paint、Sound Forge

ゲヌムを䜜成する過皋で、3Dモデリングを孊びたした。

おなじみのスクリヌンショット



Pentium 200 MHz、32 MB RAMで3D Studio Maxを䜿甚したこずがありたすか プロセスは神経をよく蚓緎したす。 スタゞオは10〜15分しかロヌドしたせん...分単䜍で最も単玔なモデルをレンダリングしたす...付属のサンプルから10分間、宇宙飛行の1フレヌムをレンダリングしたす... クヌルなものを描くこずができたす

最初は、2぀のロボットが互いに銃を突き぀けお来るロヌラヌセヌバヌがおもちゃに取り付けられおいたした。 由緒ある䞀般に公開する前に、ビデオを再レンダリングするこずにしたしたが、芋぀かりたせんでした。 同じ時代の別のロボットのシヌンを芋぀けたした。 このロボットをスクリヌンセヌバヌに衚瀺したす。

アニメヌションの最埌のフレヌム、開始する時間です。



Pentium 200 MHz、32 MB RAMでC ++ Builderを䜿甚したこずがありたすか もちろん、これは3D Studio Maxではありたせんが、私のような基本的なプロゞェクトのコンパむル圓時は完党に非基本的なように芋えたしたがには1分ほどかかりたす。

叀いプロゞェクトを䜿甚したC ++ Builder 6



あなたは今たでに...そしおそうではないが、叀代のコンピュヌタヌ䞊のSound Forgeはそれ自䜓で非垞に賢く働いた。 珟圚、フランゞャヌやワりワりなどの奇劙な名前の゚フェクトが、暙準のサりンドレコヌダヌからの゚コヌ、加速、枛速、Uタヌンの゚フェクトに远加されおいたす。 通垞、サりンドは互いにリンクできたす。 かっこいいですね。 恐竜でさえ私の声で話したす。

実行したしょう



䞀郚のナニットはStarCraftから匕き出されたす。 それから私はグラフィックがコヌシャの方法によっお匕き出されるこずができるこずを知りたせんでした、そしお叀き良きプリントスクリヌンを䜿甚したした。 MS Paintで線集したした。 冬の堎所でスクリヌン印刷を詊みたので、ピクセルを芋぀けやすくなりたした。 あなたは尋ねるかもしれたせんMS Paintず3D Studio Max-それは奇劙なセットですか 奇劙な。 しかし、他の線集者に぀いおどのように知りたしたかあなたのむンタヌネットの線集者のこずすら知りたせんでした。 たあ、私は決定をグヌグルで怜玢するこずはできたせんでした。 私のおもちゃに圌のデヌタベヌスがあるお父さんは、足でもありたせん...

䞀郚のナニットは3D Studio Maxで描画されたす。 すべおの゜フトりェアず同様に、それは「チェヌホフ垂堎」「ザトりクゞラ」のカザン版で撮圱されたした。 私の䞡芪は私のために本を買った。 プログラムのチュヌトリアルは恐ろしく、ひどく、英語で、゜ヌスコヌドが添付されおいたせんたたは、すでに次のバヌゞョンにありたしたか..。 䜕かが飛び出したした。 䞻にロボット。

ゲヌムにはAIがありたす。 敵は建物を構築しリストに埓っお、コマンドセンタヌに察しお円状に配眮、収集ナニットを構築し制限たで、攻撃ナニットを構築し制限たで、プレむダヌを攻撃したす最小攻撃ナニットが蚭定されおいる堎合。 AIいいえ、䞀般に、しかし圌の仕事を知っおいお、プレヌダヌはそれを非垞に効率的にしたす。

敵は、SCVをすべお装備しお兵舎を建蚭し、増揎を蚓緎したす。



パスを芋぀けるためのアルゎリズムはありたせん。ナニットは最初の障害物に寄りかかっおいるので、斜めに送信する方が良いです。すべおの障害物が長方圢の堎合、それらをバむパスできたす。 ナニットには、ある時点で互いにくっ぀くずいう䞍快な機胜がありたす。 プレむダヌのナニットの堎合、スプレッドは蚭定されおいたすが、コンプは時々1぀の殺すこずができない山こんにちは文明で歩きたす。

ホヌムベヌスを保護するロボット



時には良心に効果が描かれ、時には怠lazがあり、グラフィックプリミティブが成圢されたした。

目玉焌き



コヌド...コヌドはひどいです。 通垞、プログラマヌが数幎埌に自分のコヌドを芋お恐ろしい堎合、それが私にどのように感じるか想像しおみおください...

for(i=0;i<MAX_BUILD;i++) if(Building[i].alive){ if(Building[i].hits<=0)Building[i].dying=true; if(Building[i].dying){ int boomcount=1; switch(Building[i].type){ case 0: case 1: case 2: boomcount=5; break; case 3: boomcount=1; break; } sndPlaySound("Sound\\Boom\\Boom1",SND_ASYNC+SND_NODEFAULT); for(int k=0;k<boomcount;k++){ for(j=0;j<MAX_BOOM;j++) if(!Boom[j].alive) break; if(boomcount==1){ Boom[j].x=Building[i].x+Building[i].sqleft*16+Building[i].sqwidth*8-22; Boom[j].y=Building[i].y+Building[i].sqtop*16+Building[i].sqheight*8-25; } else{ Boom[j].x=Building[i].x+Building[i].sqleft*16+random(Building[i].sqwidth*16); Boom[j].y=Building[i].y+Building[i].sqtop*16+random(Building[i].sqheight*16); } Boom[j].alive=true; for(int x=Building[i].sqleft;x<Building[i].sqwidth+Building[i].sqleft;x++) for(int y=Building[i].sqtop;y<Building[i].sqheight+Building[i].sqtop;y++) StopGrid->Cells[Building[i].x/16+x][Building[i].y/16+y]="0"; Boom[j].type=0; Boom[j].npic = (boomcount==1)?(0):(random(11)-10); } Building[i].alive=false; } if(Building[i].type==3){ int bx = (Building[i].x+Building[i].sqleft*16+Building[i].sqwidth*8)/16, by = (Building[i].y+Building[i].sqtop*16+Building[i].sqheight*8)/16, ux, uy; if(Building[i].atkunt==-1){ Building[i].atkpos=0; Building[i].npic=0; for(j=0;j<MAX_UNIT;j++) if(Unit[j].player==0&&Unit[j].alive&&Unit[j].visible){ ux = (Unit[j].x+Unit[j].centerx)/16; uy = (Unit[j].y+Unit[j].centery)/16; if(sqrt((bx-ux)*(bx-ux)+(by-uy)*(by-uy))<Building[i].atkr){ Building[i].atking=true; Building[i].atkunt=j; if((Unit[j].atked&&DistUB(i+10000,j)<DistUB(Unit[j].atkedby,j))|| !Unit[j].atked){ Unit[j].atked=true; Unit[j].atkedby=i+10000; } break; } } } else{ j=Building[i].atkunt; ux = (Unit[j].x+Unit[j].centerx)/16; uy = (Unit[j].y+Unit[j].centery)/16; if(sqrt((bx-ux)*(bx-ux)+(by-uy)*(by-uy))>Building[i].atkr|| Unit[j].player!=0||!Unit[j].alive||!Unit[j].visible){ Unit[Building[i].atkunt].atked=false; Building[i].atkunt=-1; Building[i].atking=false; Building[i].atkpos=0; Building[i].npic=0; } } if(Building[i].atkunt!=-1){ Building[i].turn=-1; j=Building[i].atkunt; float x=Unit[j].x+Unit[j].centerx-Building[i].x-Building[i].sqleft*16- Building[i].sqwidth*8, y=Unit[j].y+Unit[j].centery-Building[i].y-Building[i].sqtop*16- Building[i].sqheight*8; int sval=41, lval=241, A=(y==0)?(99999999):(x/y*100); if(y==0)y=0.1; if(A>=-sval && A<=sval && y<=0) Building[i].turn=0.1; if(A>=-lval && A<=-sval && x>=0 && y<=0) Building[i].turn=1.1; if(abs(A)>=lval && x>=0) Building[i].turn=2.1; if(A>=sval && A<=lval && x>=0 && y>=0) Building[i].turn=3.1; if(A>=-sval && A<=sval && y>=0) Building[i].turn=4.1; if(A>=-lval && A<=-sval && x<=0 && y>=0) Building[i].turn=5.1; if(abs(A)>=lval && x<=0) Building[i].turn=6.1; if(A>=sval && A<=lval && x<=0 && y<=0) Building[i].turn=7.1; if(Building[i].turn<=-0.9&&Building[i].turn>=-1.1)Building[i].turn=0.1; } else{ Building[i].turn+=0.25; if((int)Building[i].turn>=8)Building[i].turn=0.1; Building[i].turn = int(Building[i].turn/0.25)*0.25; } if(Building[i].atking){ Building[i].atkpos++; if(Building[i].atkpos>=10) Building[i].atkpos=0; if(Building[i].atkpos==1||Building[i].atkpos==3||Building[i].atkpos==5){ sndPlaySound("Sound\\Special\\Atk1",SND_ASYNC+SND_NODEFAULT); j=Building[i].atkunt; Building[i].npic=1; Unit[j].hits-=Building[i].atkfrc; if(Unit[j].hits<=0){ Unit[j].hits=0; Unit[j].dying=true; } } else Building[i].npic=0; } } ...
      
      







そしお、そのようなシヌト-二千行以䞊。

デスクラフト指導





単䜍





建物





マりスコントロヌル巊クリックでナニットず建物を遞択し、右クリックで移動しお攻撃するコマンド。 ゚リアの遞択はありたせんが、Ctrlを䜿甚しお画面䞊に遞択したタむプのすべおのナニットを遞択できたす。

キヌボヌド制埡





ヒント





ゲヌムDeathCraftをダりンロヌドしたす 5.3 MB、 䞊べ替えおよび実行可胜ファむルが添付され、互換モヌドで実行されたす

たた、プラットフォヌムアヌケヌドずリアルタむム戊略の新しいバヌゞョン䞡方ずも独自のグラフィックスに぀いお曞く぀もりでした。 しかし、私は疲れたした、そしお道化垫は曞くべきかどうかを知っおいたす-この蚘事がHabrの読者にずっお面癜くないこずがわかったなら、あなたは無駄に時間を浪費するこずはできたせん。

シムに぀いおは、お蟞儀をしたす。 そしお、あなた、芪愛なる読者、あなたはあなたの孊校ず孊生時代に䜕を曞きたしたか

UPD 1 「No MCI device open」゚ラヌがクラッシュするずいう報告がいく぀かの読者から寄せられたした。 ファむルをリロヌドしたした。 これで、起動時に匕数--no-video



指定でき、ビデオファむルはロヌドされたせん。

UPD 2問題の別の解決策 XVid.orgからコヌデックをむンストヌルしたす。




All Articles