Spiele Programmier wie funktioniert das?

Synth

Cadet 2nd Year
Registriert
Jan. 2008
Beiträge
31
Hallo liebe CB Community,

ich habe schon des öfteren Threads hier gelesen á la :" Wie Programmier ich ein 3D Spiel?" oder " Welche Sprache brauche ich dazu?" Antwort war glaub öfters sogar C++ sei die Sprache nun aber meine Frage. Ich sollte vorweg sagen, dass ich C++ anfänger bin und nur geringe Kenntnisse hab. Meine Frage ist relativ simpel für die Leute die sich mit Spiele Programmieren auskennen, denke ich zumindestens.

Also: Wie sieht so eine Spiel aus? Ich meine man wird dem Rechner bei Spielen wie Counter Strike o.ä. schlecht sagen können:" Hey wenn mit einer Waffe auf ein Gegner geschossen wird sollte der dann sterben..." Also zumindestens denke ich mir, dass so ein Spiel nich aus IF abfragen besteht... Oder etwa doch? Ist halt eine Frage die mich brennend interessiert.

Um missverständnisse auszuschließen: Ich möchte kein Spiel Programmier interessiert mich einfach. Also bitte keine Tipps wie:" Lern erstmal C++ und befass dich mit grafischen Oberflächen" :)

Ne Antwort wäre cool.


Mit freundlichem Gruß


Synth
 
hi,

eine If abfrage vielleicht, aber erstmal errechnet ein Algorythmus wo der getroffen wurde und ob es sofort tödlich ist, oder wieviel leben verloren geht usw. Es gibt da ganz interresante Bücher drüber, hat auch viel mit Mathe zu tun.
 
Zb: hast du 4 Variablen: Kugelposition (bestehend aus X1, Y1, und Z1) und die gegnerpositzion (auch 3Dimensionen). dann noch gegners Lebenspunkte und wieviel so ne Kugel Schaden macht.

Code C#:

If ((X1 == Y2) && (Y1 == Y2) && (Z1 == Z2))
{
Lp_Gegner = Lp_Gegner - Kugel_Schaden;
if (Lp-Gegner <= 0)
{
label1.Visible = true;
label1.Text = "Gegner X tot"
}
}

Natürlich kommen da noch haufen grafische Berechnungen dazwischen, aber das ist das Prinzip.
<= bedeutet kleiner gleich, label ist ein Textfeld, was mit der Anweisung Visible Sichtbar gemacht wird. { sind die Schleifenklammern für die If-schleife, Then oder Ifend ist im gegenteil zur taschenrechnerprogrammierung nicht notwendig.

Ich hab mich auch mal an 3D gewagt, man brauch aber ein Engine dafür, das war dann n bissl zu kompliziert für mich...:D
Was mich persönlich brennend interessiert, ist, wie man eine For-schleifenberechnung Multithreading-fähig machen kann...

Gruß AEROON
 
Die Routinen sind in DirectX enthalten und werden in das betreffende Programm integriert. Das hat den Vorteil, dass nicht jedesmal bei einem neuen oder erweterten Funktionsumfang eines Programmes neue Routinen geschrieben werden müssen.

Diese sogennannten APIs (Application programming interfaces) oder einfach Programmierschnittstellen, bilden die Grundlagen nicht nur für die Spieleprogrammierung sondern auch für 3D-Anwendung in hoher Qualität.

http://de.wikipedia.org/wiki/Programmierschnittstelle

aido
 
AEROON schrieb:
{ sind die Schleifenklammern für die If-schleife, Then oder Ifend ist im gegenteil zur taschenrechnerprogrammierung nicht notwendig.

http://www.if-schleife.de/

edit:
Code:
#include <string>
#include <iostream>
#include <windows.h>

using namespace std;

long WINAPI thread1()
{
  for(int i = 0; i < 10; i++)
  {
    cout<<"Thread1"<<endl;
    Sleep(1000);
  }

  return 0;
}

long WINAPI thread2()
{
  for(int i = 0; i < 10; i++)
  {
    cout<<"Thread2"<<endl;
    Sleep(200);
  }

  return 0;
}

int main(int argc, char **argv)
{
  HANDLE hThread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread1, 0, 0, 0);
  HANDLE hThread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread2, 0, 0, 0);

  WaitForSingleObject(hThread1, INFINITE);
  WaitForSingleObject(hThread2, INFINITE);

  CloseHandle(hThread1);
  CloseHandle(hThread2);

  return 0;
}
eine schleife kannst du nicht parallelisieren, nur die anweisungen in der schleife. und das hängt davon ab, was du machen willst und ob du die daten getrennt berechnen kannst.
 
Zuletzt bearbeitet:
@ AEROON
error: syntax error near '}'
 
Wie wäre es, wenn wir mal beim Thema bleiben würden?

@aido: "if" ist genauso wenig eine Funktion wie eine Schleife, zudem ist das Beispiel sowas von doof, weil es sich auch mit den IFs deutlich eleganter lösen lassen kann, wenn man direkt mal annimmt, dass die Funktion einen gültigen Monat liefert...

Code:
if (monat <= 3) {
  quartal = 1;
} else if (monat <= 6) {
  quartal = 2;
} else if (monat <= 9) {
  quartal = 3;
} else {
  quartal = 4;
}

Noch schöner (ok net schöner aber effizienter) wäre es allerdings so
Code:
quartal = (monat + 2) / 3;

Aber das ist komplett Offtopic...
 
Zuletzt bearbeitet: (Edit: Natürlich kein Modulo, sondern eine normale Division...)
@claW3581: Ich wollte einen Benchmark schreiben (CPU-test). Habs auch hingekriegt, leider nur 1 Kern auslastung.
Ich hab in der Schleife allemöglichen bool-, int-, double-berechnungen, die Schleife wiederholt sich ca. 100000x. Vielleicht kann jemand ein Beispielcode (C#) mit 2 paralellen For-(schleifen?) reinstellen, das wäre echt der Hammer:)
 
Mach halt nen neuen Thread für dein Problem auf...
Zudem könntest du ja einfach die Schleife mehrmals aufrufen, pro Core in einem separaten Thread, und damit die Schleifendurchläufe alle etwa gleich lang sind (die Dauer der Berechnung könnte ja von der Laufvariable abhängen), ist der Startwert bei Core 0 eben 0 (bzw 1), bei Core 1 um 1 höher, bei Core 2 wieder um 1 höher etc... erhöhst du den Zähler dann immer um die Zahl der Cores...
Aber um Gottes Willen, das hat nun wirklich gar nichts mehr mit dem Thema zu tun...
 
sieh dir mal das an, hier werden meine beiden cores sehr gut zu 100 % ausgelastet. wie es funktioniert steht auch im artikel drin.
 
Zum Thema "If-Schleife": Es ist zwar in den meisten Fällen "If-Abfrage" gemeint, jedoch gibt es zumindest in C/C++ sehr wohl eine "If-Schleife":

int i = 0;
label:
// Tue irgendwas
i++;
if (i < 10) goto label;
 
@bkausbk,

einfach eine unelegante for bzw (do) while schleife ;)
 
Zuletzt bearbeitet von einem Moderator: (Überflüssiges Komplettzitat entfernt.)
bkausbk schrieb:
int i = 0;
label:
// Tue irgendwas
i++;
if (i < 10) goto label;

zeig mir diese "schleife" mal bitte in java, php, python, perl, pascal, ... wenn du das kannst, dann glaub ich dir, dass es eine "if-schleife" gibt.
 
@bkausbk: 6 Setzen!

Wenn du mit Sprunganweisungen programmierst, solltest nochmal von ganz vorne anfangen.
Mit goto etc. wird ein Programm nur unübersichtlich.

Und was du da an Quelltext gepostet hast, ist immer noch keine "If-Schleife".
Auch wenn da ein paar Zeilen Code wiederholt werden, bis eine bestimmte Bedingung erfüllt ist es keine Schleife.

PHP:
function foo($i)
{
     if($i <= 10)
     {
          foo($i);
     }
}
foo(0);
Das ist ja auch keine Schleife, sondern eine Rekrusion.

Grüße

krizzel
 
Zuletzt bearbeitet:
Zurück
Oben