| Autor |
Beitrag |
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Fr 10.10.08 19:11
Hi,
Zu deinem Scrolling: Normalerweise wird ja nur gescrollt, wenn der Cursor in die Randbereiche des Bildschirms kommt. Ich habe mir es mal objektiv angesehen.
Hat auch Vorteile. Aber: Beim Fokussieren eines bestimmten Bildschirmbereiches und gleichzeitigen Klicken auf ein Gebäude behindert es kolossal(angenommen du willst nicht einfach auf eine Stelle klicken, sondern z.B. fünf Gebäude gleichzeitig im Blickfeld haben. Und dann eben diese fünf sehen und relativ dazu ein sechstes platzieren).
Könntest du das Scrolling abschalten, während z.B. die Strg-Taste oder die rechte Maustaste gedrückt ist? Dann ginge beides
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
kai_lamers 
      
Beiträge: 24
|
Verfasst: Fr 10.10.08 22:13
Hey,
Wunsch ist erfüllt und halte ich auch für sinnvoll. Durch Druck auf die STRG Taste wird das Scrollen für entsprechende Zeit deaktiviert - erhöht das Gameplay schon ziemlich drastisch.
Heute bin ich leider nicht in dem Maße zur Spielsteuerung gekommen, wie ich es eigentlich wollte, da ich mich vorher erstmal mit der Bildschirmausgabe von Nachrichten für den Benutzer herumquälen musste. Funktioniert nun eigentlich, aber irgendwie gibt's noch ein Zugriffsfehler, der nur dann passiert, wenn man ganz häufig hintereinander (momentan natürlich nur) Mühlen baut. Woran das liegt weiß ich noch nicht, habe aber auch heute keinen Nerv mehr das rauszufinden.
Morgen gibt's erst wieder Abends was von mir zu hören, da ich tagsüber unterwegs bin. Für morgen habe ich mir jetzt die Behebung des Bugs + Steuerung vorgenommen.
Ich weiß zwar noch nicht, wie genau ich meiner TMessageWindow Klasse eine entsprechende Klickprozedur implementieren kann (und eventuell auch noch eine Button Klasse), damit man ab morgen auch mal mehr als nur Mühlen bauen kann.
Bisher ist also Fertig gestellt:
* Gebäudeimplementierung
* Ressourcenneuberechnung nach Spielzyklus
* Statusmessageausgabe
* Grafikausgabe (nur die entsprechenden Tiles muss ich noch modellieren (Ich modelliere die Tiles in c4d mit isometrischer Ansicht und skaliere sie dann auf entsprechende 64*32px herunter))
Die aktuelle Version gibt's im ersten Beitrag.
Anbei wieder mal meine Uobject.pas:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639: 640: 641:
| unit Uobject;
interface
Uses SysUtils,Classes,Graphics,DXDraws;
type TSTringdynarray = array of String;
type
Tressources=Class(TObject) private b_oat:integer; b_stone:integer; b_metal:integer; procedure setoat(o:integer); procedure setstone(s:integer); procedure setmetal(m:integer); public property oat:integer read b_oat write setoat; property stone:integer read b_stone write setstone; property metal:integer read b_metal write setmetal; end;
Tpropertylist=Class(TObject) private b_name:string; b_building_id:integer; b_tile_id:integer; b_need:Tressources; b_produce:Tressources; b_produce_time:TRessources; b_make_inhabitants:integer; b_max_level:integer; b_life_points:integer; b_time:Tressources; procedure setname(n:string); procedure setbuilding_id(b:integer); procedure settile_id(ti:integer); procedure setneed(ne:Tressources); procedure setproduce(pro:Tressources); procedure setproduce_time(prot:Tressources); procedure setmake_inhabitants(mi:integer); procedure setmax_level(ml:integer); procedure setlife_points(lp:integer); procedure settime(t:Tressources); public constructor create; destructor destroy; property name:string read b_name write setname; property building_id:integer read b_building_id write setbuilding_id; property tile_id:integer read b_tile_id write settile_id; property need:Tressources read b_need write setneed; property produce:Tressources read b_produce write setproduce; property produce_time:TRessources read b_produce_time write setproduce_time; property make_inhabitants:integer read b_make_inhabitants write setmake_inhabitants; property max_level:integer read b_max_level write setmax_level; property life_points:integer read b_life_points write setlife_points; property time:Tressources read b_time write settime; end;
Tspieler=Class(TObject) private b_res:Tressources; b_inhabitants:integer; b_century:integer; b_messages:array of String; procedure setressources(res:Tressources); procedure setinhabitants(inhab:integer); procedure setcentury(centu:integer); function gettext(Index: Integer): string; procedure puttext(Index: Integer; tex: string); public constructor create(oat,stone,metal,inhabitants,century:integer); destructor destroy; property ressources:Tressources read b_res write setressources; property inhabitants:integer read b_inhabitants write setinhabitants; property century:integer read b_century write setcentury; property messages[Index: Integer]: string read gettext write puttext; default; end;
TMessagewindow=Class(TObject) private b_posx:integer; b_posy:integer; b_width:integer; b_height:integer; b_visible:Boolean; b_text:array of string; procedure setvisible(vis:Boolean); function gettext(Index: Integer): string; procedure puttext(Index: Integer; tex: string); public procedure draw(canvas:TDirectDrawSurfaceCanvas); constructor create(x,y,width,height:integer;visible:boolean); property visible:Boolean read b_visible write setvisible; procedure setpos(posx,posy:integer); procedure setzsize(width,height:integer); property text[Index: Integer]: string read gettext write puttext; default; end;
TPropertymanager=Class(Tobject) private props:Tpropertylist; procedure setprops(prop:Tpropertylist); public constructor create(building_file:string;building_typ:integer); destructor destroy; property properties:Tpropertylist read props write setprops; end;
TBuilding=Class(Tobject) private prope_manager:Tpropertymanager; xcoord:integer; ycoord:integer; b_typ:integer; b_level:integer; b_status:integer; procedure setx(x:integer); procedure sety(y:integer); procedure settyp(typ:integer); procedure setlevel(level:integer); procedure setstatus(status:integer); procedure setpropmanager(propmanager:Tpropertymanager); public constructor create(building_typ:integer); destructor destroy; property x:integer read xcoord write setx; property y:integer read ycoord write sety; property typ:integer read b_typ write settyp; property level:integer read b_level write setlevel; property status:integer read b_status write setstatus; property prop_manager:Tpropertymanager read prope_manager write setpropmanager; procedure develop; end;
TObjectmanager=Class(TObject) private object_id:integer; object_array: array of Tbuilding; protected function getbuilding(Index: Integer): Tbuilding; procedure putbuilding(Index: Integer; build:Tbuilding); public constructor create; destructor destroy; function build(typ:integer;x,y:integer;stufe:integer;spieler:Tspieler):integer; function search(x,y:integer):integer; property objects[Index: Integer]: Tbuilding read getbuilding write putbuilding; default; property max_id:integer read object_id; end;
TGame=Class(TObject) private b_objectmanager:Tobjectmanager; b_reswindow:TMessagewindow; b_eventwindow:TMessagewindow; b_infowindow:TMessagewindow; b_spieler:Tspieler; procedure inctime(res:Tressources); procedure setobjectmanager(om:Tobjectmanager); procedure setinfowindow(iw:TMessagewindow); public constructor create(); destructor destroy; procedure calcressources; procedure tick; procedure informplayer; property Objectmanager : TObjectmanager read b_objectmanager write setobjectmanager; property reswindow : TMessagewindow read b_reswindow; property eventwindow : TMessageWindow read b_eventwindow; property infowindow : TMessageWindow read b_infowindow write setinfowindow; property spieler : TSpieler read b_spieler; end;
implementation
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray; var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(Result, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(Result, 1); Result[0] := S; Exit; end; SepLen := Length(Separator); ALen := Limit; SetLength(Result, ALen);
Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); SetLength(Result, ALen); end; SetString(Result[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(Result, Index); end;
procedure Tressources.setoat(o:integer); begin b_oat:=o; end;
procedure Tressources.setstone(s:integer); begin b_stone:=s; end;
procedure Tressources.setmetal(m:integer); begin b_metal:=m; end;
constructor Tpropertylist.create(); begin b_need:=Tressources.create; b_produce:=Tressources.create; b_produce_time:=Tressources.create; b_time:=Tressources.create; end;
destructor Tpropertylist.destroy; begin b_need.Free; b_produce.Free; b_produce_time.Free; b_time.Free; end;
procedure Tpropertylist.setname(n:string); begin b_name:=n; end;
procedure Tpropertylist.setbuilding_id(b:integer); begin b_building_id:=b; end;
procedure Tpropertylist.settile_id(ti:integer); begin b_tile_id:=ti; end;
procedure Tpropertylist.setneed(ne:Tressources); begin b_need:=ne; end;
procedure Tpropertylist.setproduce(pro:Tressources); begin b_produce:=pro; end;
procedure Tpropertylist.setproduce_time(prot:Tressources); begin b_produce_time:=prot; end;
procedure Tpropertylist.setmake_inhabitants(mi:integer); begin b_make_inhabitants:=mi; end;
procedure Tpropertylist.setmax_level(ml:integer); begin b_max_level:=ml; end;
procedure Tpropertylist.setlife_points(lp:integer); begin b_life_points:=lp; end;
procedure Tpropertylist.settime(t:Tressources); begin b_time:=t; end;
constructor Tspieler.create(oat,stone,metal,inhabitants,century:integer); begin b_res:=Tressources.Create; b_res.oat:=oat; b_res.stone:=stone; b_res.metal:=metal; b_inhabitants:=inhabitants; b_century:=century; SetLength(b_messages,1); end;
destructor Tspieler.destroy; var i:integer; begin b_res.Free; end;
function Tspieler.gettext(Index: Integer): string; begin Result := b_messages[Index]; end;
procedure TSpieler.puttext(Index: Integer; tex:string); begin if Index >= Length(b_messages)-1 then SetLength(b_messages, Length(b_messages)+1); b_messages[Index] := tex; end;
procedure Tspieler.setressources(res:Tressources); begin b_res:=res; end;
procedure Tspieler.setinhabitants(inhab:integer); begin b_inhabitants:=inhab; end;
procedure Tspieler.setcentury(centu:integer); begin b_century:=centu; end;
constructor TMessagewindow.create(x:integer;y:integer;width:integer;height:integer;visible:boolean); begin b_posx:=x; b_posy:=y; b_width:=width; b_height:=height; b_visible:=visible; SetLength(b_text,1); end;
function TMessagewindow.gettext(Index: Integer): string; begin Result := b_text[Index]; end;
procedure TMessagewindow.puttext(Index: Integer; tex:string); begin if Index >= Length(b_text) then SetLength(b_text, Length(b_text)+1); b_text[Index] := tex; end;
procedure TMessagewindow.setpos(posx:Integer;posy:integer); begin b_posx:=posx; b_posy:=posy; end;
procedure TMessagewindow.setzsize(width,height:integer); begin b_width:=width; b_height:=height; end;
procedure TMessagewindow.draw(canvas:TDirectDrawSurfaceCanvas); var i:integer; begin if b_visible then begin canvas.Brush.Color:=clsilver; canvas.Font.Color:=clblack; canvas.Rectangle(b_posx,b_posy,b_posx+b_width,b_posy+b_height); for i:=0 to Length(b_text)-1 do canvas.TextOut(b_posx+1,b_posy+1+(i*13),b_text[i]); canvas.release; end; end;
procedure TMessagewindow.setvisible(vis:Boolean); begin b_visible:=vis; end;
constructor Tpropertymanager.create(building_file:string;building_typ:integer); var b_file:textfile; var line:string; var res:TSTringdynarray; begin props:=Tpropertylist.Create; AssignFile(b_file,ExtractFilePath(ParamStr(0)) + building_file); Reset(b_file); while not eof (b_file) do begin readln(b_file,line); res:=Explode(',',line,0); props.name:=res[0]; props.building_id:=strtoint(res[1]); props.tile_id:=strtoint(res[2]); props.need.oat:=strtoint(res[3]); props.need.stone:=strtoint(res[4]); props.need.metal:=strtoint(res[5]); props.produce.oat:=strtoint(res[6]); props.produce.stone:=strtoint(res[7]); props.produce.metal:=strtoint(res[8]); props.produce_time.oat:=strtoint(res[9]); props.produce_time.stone:=strtoint(res[10]); props.produce_time.metal:=strtoint(res[11]); props.make_inhabitants:=strtoint(res[12]); props.max_level:=strtoint(res[13]); props.life_points:=strtoint(res[14]); if building_typ=props.building_id then break; end; end;
destructor Tpropertymanager.destroy; begin props.Free; end;
procedure Tpropertymanager.setprops(prop:Tpropertylist); begin props:=prop; end;
constructor Tbuilding.create(building_typ:integer); begin prope_manager:=Tpropertymanager.create('building.txt',building_typ); end;
destructor Tbuilding.destroy; begin prope_manager.Free; end;
procedure Tbuilding.setpropmanager(propmanager:Tpropertymanager); begin prope_manager:=propmanager; end;
procedure Tbuilding.develop(); begin inc(b_level); end;
procedure Tbuilding.setx(x:integer); begin xcoord:=x; end;
procedure Tbuilding.sety(y:integer); begin ycoord:=y; end;
procedure Tbuilding.settyp(typ:integer); begin b_typ:=typ; end;
procedure Tbuilding.setlevel(level:integer); begin b_level:=level; end;
procedure Tbuilding.setstatus(status:integer); begin b_status:=status; end;
constructor Tobjectmanager.create(); begin object_id:=0; SetLength(Object_Array, 2500); end;
destructor Tobjectmanager.destroy; var i:integer; begin for i:=0 to length(object_array)-1 do object_array[i].Free; end;
function Tobjectmanager.search(x:integer;y:integer):integer; var i:integer; begin if object_id>0 then begin for i:=0 to object_id-1 do begin if (object_array[i].x=x) and (object_array[i].y=y) then begin result:=i; break; end; result:=-1; end; end else result:=-1; end;
function Tobjectmanager.getbuilding(Index: Integer): Tbuilding; begin result:=nil; if object_id > 0 then Result := object_array[Index]; end;
procedure Tobjectmanager.putbuilding(Index: Integer; build:Tbuilding); begin if object_id > 0 then object_array[Index] := build; end;
function Tobjectmanager.build(typ:integer;x,y:integer;stufe:integer;spieler:Tspieler):integer; begin result:=-1; object_array[object_id]:=TBuilding.create(typ); if spieler.ressources.oat >= object_array[object_id].prop_manager.properties.need.oat then if spieler.ressources.stone >= object_array[object_id].prop_manager.properties.need.stone then if spieler.ressources.metal >= object_array[object_id].prop_manager.properties.need.metal then begin object_array[object_id].typ:=typ; object_array[object_id].x:=x; object_array[object_id].y:=y; object_array[object_id].level:=stufe; result:=object_id; spieler.ressources.oat:=spieler.ressources.oat - object_array[object_id].prop_manager.properties.need.oat; spieler.ressources.stone:=spieler.ressources.stone - object_array[object_id].prop_manager.properties.need.stone; spieler.ressources.metal:=spieler.ressources.metal - object_array[object_id].prop_manager.properties.need.metal; spieler.messages[length(spieler.b_messages)-1]:='Gebäude erfolgreich gebaut!'; inc(object_id); end; if result=-1 then begin object_array[object_id].Free; spieler.messages[length(spieler.b_messages)-1]:='Gebäude konnte aufgrund fehlender Ressourcen nicht gebaut werden!'; end;
end;
constructor Tgame.create; begin b_objectmanager:=Tobjectmanager.create; b_reswindow:=TMessagewindow.create(0,0,250,15,true); b_eventwindow:=TMessagewindow.create(0,618,375,70,true); b_infowindow:= TMessagewindow.create(0,0,150,40,false); b_spieler:=Tspieler.create(100,100,100,10,1); b_reswindow.text[0]:=' Getreide: '+inttostr(b_spieler.ressources.oat)+' Stein: '+inttostr(b_spieler.ressources.stone)+' Metall: '+inttostr(b_spieler.ressources.metal);end;
destructor Tgame.destroy; begin b_objectmanager.free; b_reswindow.Free; b_eventwindow.Free; b_infowindow.free; b_spieler.Free; end;
procedure Tgame.setobjectmanager(om:Tobjectmanager); begin b_objectmanager:=om; end;
procedure Tgame.setinfowindow(iw:TMessagewindow); begin b_infowindow:=iw; end;
procedure Tgame.tick; begin calcressources; b_reswindow.text[0]:=' Getreide: '+inttostr(b_spieler.ressources.oat)+' Stein: '+inttostr(b_spieler.ressources.stone)+' Metall: '+inttostr(b_spieler.ressources.metal); informplayer; end;
procedure Tgame.calcressources; var i,x:integer; begin for i:=0 to b_objectmanager.max_id-1 do begin inctime(b_objectmanager.objects[i].prop_manager.properties.time); if b_objectmanager.objects[i].prop_manager.properties.time.oat>=b_objectmanager.objects[i].prop_manager.properties.produce_time.oat then begin b_spieler.ressources.oat:=b_spieler.ressources.oat+b_objectmanager.objects[i].prop_manager.properties.produce.oat; b_objectmanager.objects[i].prop_manager.properties.time.oat:=0; end; if b_objectmanager.objects[i].prop_manager.properties.time.stone>=b_objectmanager.objects[i].prop_manager.properties.produce_time.stone then begin b_spieler.ressources.stone:=b_spieler.ressources.stone+b_objectmanager.objects[i].prop_manager.properties.produce.stone; b_objectmanager.objects[i].prop_manager.properties.time.stone:=0; end; if b_objectmanager.objects[i].prop_manager.properties.time.metal>=b_objectmanager.objects[i].prop_manager.properties.produce_time.metal then begin b_spieler.ressources.metal:=b_spieler.ressources.metal+b_objectmanager.objects[i].prop_manager.properties.produce.metal; b_objectmanager.objects[i].prop_manager.properties.time.metal:=0; end; end; end;
procedure Tgame.inctime(res:Tressources); begin res.oat:=res.oat+1; res.stone:=res.stone+1; res.metal:=res.metal+1; end;
procedure Tgame.informplayer; var i,j:integer; begin eventwindow.text[0]:=' STATUS'; j:=length(spieler.b_messages)-5; if j<0 then j:=0; for i:=j to length(spieler.b_messages)-1 do begin if spieler.messages[i]<>'' then begin eventwindow.text[length(spieler.b_messages)-i-1]:=' '+spieler.messages[i]; end; end; end;
end. |
Lg,
Kai
|
|
wurstuk
      
Beiträge: 77
Win XP, Ubuntu
Delphi 7 personal
|
Verfasst: Sa 11.10.08 07:22
Hmmm ich finde es biss jetzt sehr gut!
Aber könnte mann nicht vllt statt dem Gitternetz einfach nur gras haben? also wo es wie in einem Gitternetz ist
bloß mann sieht es halt nicht^^
aber ich glaube das wird echt cool wenns fertig ist^^
_________________ Wer Rechtschreibfehler findet darf sie behalten!
<(^_^)> <[$_$]>
|
|
passiv
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: Sa 11.10.08 09:37
ich habs mir bisher noch nicht angesehen, weils zu dick ist für meine leitung  . aber was man so hört (sorry: liest) soll bisher es ganz gut sein.
was bisher nicht angebracht wurde: deine häuser sind unendlich haltbar. im normalfall, also in allen strategie-spielen, gibt es abnutzung: feuer, krankheit und einsturz. und dann hat man feuerwehr, heilanstalten und architekten/baumeister. und wenn einer das haus passiert (vorbeigeht) wird im haus ein feuer: integer; zurückgesetzt auf 0. das wär noch ein punkt für die überklasse TBuilding. und wenn der wert aber 100 erreicht, bricht feuer aus. dann strömen alle feuerwehren herbei und löschen. incrementieren tut man den halt einfach per timer oder zufall, je nachdem.
den letzten punkt würd ich erst realisieren, wenn du schon eine funktionierende wege- und wegsuchengine hast. also wie ein navi halt
auch noch: lagerhaus/silo zum lagern der waren, bevor sie aufn markt kommen.
und noch was: wasserversorgung ... falls das noch irgendwie passt
ansonsten toi-toi-toi! du schaffst das!
mfg
Fabian
_________________ Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
|
|
wurstuk
      
Beiträge: 77
Win XP, Ubuntu
Delphi 7 personal
|
Verfasst: Sa 11.10.08 10:53
Das erinnert mich sehr an diese "der erste Kaiser", "Pharao", "Herscher des Olymps", ... Spiele
Da musste mann auch immer Architekten bauen und so^^
Aber sonst sind es Klassiker werden zwar ein bisschen Schnell Langweilig aber sonst eig. ganz gut^^ dort könntest du dir ja Ideen für dein Spiel holen 
_________________ Wer Rechtschreibfehler findet darf sie behalten!
<(^_^)> <[$_$]>
|
|
passiv
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: Sa 11.10.08 13:34
jop, im konkreten pharao und caesar. letzteres ist ein weltklassespiel 
_________________ Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 11.10.08 14:09
[OT]
Nach Pharao grabe ich schon seit zwei Jahren immer mal wieder. Bisher nicht gefunden
[/OT]
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
kai_lamers 
      
Beiträge: 24
|
Verfasst: Sa 11.10.08 23:44
Hey,
heute kam ich zu nix, da ich bis grad eben noch unterwegs war und jetzt weder Nerv, noch die entsprechende Wachheit habe, um noch was gescheites auf die Beine zu stellen.
Die Gebäude an sich haben schon keine unendliche Haltbarkeit, die Klasse besitzt einen Integer Wert namens Life Points, die gibt es schon, ist aber bisher nicht ordentlich in die anderen Klassen implementiert - wie auhc, es gibt ja noch keine "zerstörenden Klassen".
Danke schonmal für die Ideen, werde ich an entsprechendem Zeitpunkt gerne drauf zurückgreifen.
@Wurstuk:
Welches Gitter meinst du?
Wie es bei mir aussieht ("nur Gras"), kannst du im Screenshot im Anhang sehen.
Jetzt muss ich aber ins Bett, kam grad erst aus den Horrorwood Studios
Lg,
Kai
Einloggen, um Attachments anzusehen!
|
|
wurstuk
      
Beiträge: 77
Win XP, Ubuntu
Delphi 7 personal
|
Verfasst: So 12.10.08 02:14
Aso....
Ka warum bei mir so ein gitter ist.... liegt warscheinlich an meinem PC^^
bei dier siehts sowie so viel coller aus als bei mir 
_________________ Wer Rechtschreibfehler findet darf sie behalten!
<(^_^)> <[$_$]>
|
|
kai_lamers 
      
Beiträge: 24
|
Verfasst: So 12.10.08 13:12
Kannst du eventuell mal einen Screenshot hochladen?
Würde mich mal interessieren.
Danke!
|
|
wurstuk
      
Beiträge: 77
Win XP, Ubuntu
Delphi 7 personal
|
Verfasst: So 12.10.08 19:27
ne kann ich nicht sry bei mir ist die drucken taste kaputt und ich hab jetzt echt kein bock gimp zu starten^^
aber du kannst es dir so vorstellen das mann das gras nicht so wirklich sieht sondern nur eine dunkelgrüne Fläche und dadrauf ist ein Gitternetz in schwarzen Linien^^
_________________ Wer Rechtschreibfehler findet darf sie behalten!
<(^_^)> <[$_$]>
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 12.10.08 21:18
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
kai_lamers 
      
Beiträge: 24
|
Verfasst: So 12.10.08 21:34
wurstuk hat folgendes geschrieben : | ne kann ich nicht sry bei mir ist die drucken taste kaputt und ich hab jetzt echt kein bock gimp zu starten^^
aber du kannst es dir so vorstellen das mann das gras nicht so wirklich sieht sondern nur eine dunkelgrüne Fläche und dadrauf ist ein Gitternetz in schwarzen Linien^^ |
Schade, dann werde ich den Fehler bei Dir wohl auch nicht näher lokalisieren können.
Aber gut - weiter geht's.
Jetzt mache ich mich auf die Suche nach der Ursache der Zugriffsverletzung (s.o.) - damit ich danach ENDLICH mal zur Steuerung kommen kann.
Wenn's was neues gibt, melde ich mich
Lg,
Kai
|
|
passiv
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: Mo 13.10.08 14:35
ich hab mir jetzt mal den code für die häuser angesehen und denk mir: wieso hast du soviele property- und object-manager?
dann hab ichs mir durchgedacht und bin auf 2 notwendige dinge gekommen: ein Haus-Objekt (TBuilding) und ein Verwaltungs-Objekt (TObjectInspector). und da verwaltet einfach der OI jedes haus in einem array. und jedes haus hat natürlich auch noch einen pointer auf seinen eltern-OI. und wenn man das gleich für multiplayer auslegen will, schreibt man sich noch ein Spiel-Objekt (TGame), die alle OIs verwaltet ...
das wär meine Idee und ich versuch das ganze auch gerade zu implementieren. (nur scheiterts bei mir an der grafik-engine. die TPaintBox is wohl nicht so super  . und ich kapier sämtliche OGL dinger nicht. [OT]jedes tutorial besteht aus einer .pas-datei und basiert auf try-and-error, was mir bisher noch zu fad war.[/OT])
mfg
passiv
_________________ Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 13.10.08 15:11
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
kai_lamers 
      
Beiträge: 24
|
Verfasst: Mo 13.10.08 16:04
Hey,
also ich halte es für sinnvoll jedem Building im Objectmanager einen propertymanager zuzuweisen, da schließlich auch jedes Gebäude eigene properties besitzt - so ist erstmal jedes Gebäude eine "autarke" Instanz, auf die ich mithilfe des Propertymanagers vollen Zugriff habe und auch haben möchte.
Es gibt übrigens nur EIN Objectmanager und den besitzt die Klasse TGame - also von vielen Objektmanagern kann da wirklich nicht die Rede sein
Natürlich könnte man auch das Object Array entsprechend mehrdimensional anlegen, sodas nach festgelegter Syntax gesagt werden kann Object_Array[id, 1]=Need Oat, ...[id,2]=Need Stone, doch empfinde ich den Zugriff mithilfe des Prop.Managers anhand folgender Klassen sehr viel angenehmer.
Tgame.Tobjectinspector.TBuilding[Integer].TPropertymanager.TProperylist
Performanter und sinnvoller geht es immer - am grundlegenden Klassenkonzept werde ich auch erstmal nichts mehr großartig ändern - Da auf diesem Konzept alle meine Planungen, derzeit noch auf Papier, aufgebaut sind.
EDIT:
=====
Jetzt wo ich mir deinen Beitrag das 2. mal durchgelesen habe: Quasi genau so habe ich es doch gemacht?!
Es gibt eine Klasse Tgame, die besitzt einen Objectmanager, welcher ein Array des Typs TBuilding besitzt. Jedes TBuilding besitzt dann halt einen Objectmanager, aber dazu: s.o.
Lg,
Kai
|
|
wurstuk
      
Beiträge: 77
Win XP, Ubuntu
Delphi 7 personal
|
Verfasst: Mo 13.10.08 16:09
Ok werd ein Screenshot machen^^
ich werd ihn dann morgen reinstellen und das mit dem Programm das mit einer anderen taste einen Screenshot macht
kann ich noch nicht^^ würde mich aber belehren lassen 
_________________ Wer Rechtschreibfehler findet darf sie behalten!
<(^_^)> <[$_$]>
|
|
kai_lamers 
      
Beiträge: 24
|
Verfasst: Mo 13.10.08 16:15
[OT]
Hey,
danke.
Hier hast du mal ein Codeschnipsel, anhand dessen wirds ziemlich schnell klar, wie's geht.
Wie du einen Tastendruck entsprechend abfängst kriegst du ja selbst hin
www.scalabium.com/faq/dct0001.htm
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.Button1Click(Sender: TObject); var DCDesk: HDC; bmp: TBitmap; begin bmp := TBitmap.Create; bmp.Height := Screen.Height; bmp.Width := Screen.Width;
DCDesk := GetWindowDC(GetDesktopWindow); BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DCDesk, 0, 0, SRCCOPY);
bmp.SaveToFile('ScreenShot.bmp');
ReleaseDC(GetDesktopWindow, DCDesk);
bmp.Free; end; |
[/OT]
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 13.10.08 16:43
Jop. Nur statt SaveToFile dann CopyToClipboard 
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
wurstuk
      
Beiträge: 77
Win XP, Ubuntu
Delphi 7 personal
|
Verfasst: Mo 13.10.08 21:45
hmm ich check dis i-wie nicht... hab jetzt aber auch gerade wenig zeit werde mich morgen mal eindringlicher mit der Seite beschäftigen^^
Als Anhang ist jetzt ein Screenshot vom Spiel, war doch einfacher mit Gimp als ich es in Erinnerung hatte^^
Einloggen, um Attachments anzusehen!
_________________ Wer Rechtschreibfehler findet darf sie behalten!
<(^_^)> <[$_$]>
|
|
|