Gjest Slettet+9871234 Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 (endret) Ved spillutvikling er det ikke uvanlig å integrere et skript språk som for eksempel Python med C++. Spillmotoren skrives i C++ og grensesnittet i Python. God litteratur som behandler dette i større detalj: http://www.amazon.com/Game-Programming-Python-Development/dp/1584502584 God bok (som er relativt oppdatert på C++): http://www.amazon.com/C-Game-Programmers-Development/dp/1584504528/ Algoritmer og datastrukturer: http://www.amazon.com/Data-Structures-Algorithms-Developers-Development/dp/1584504951 Se også: http://wiki.python.org/moin/GameProgramming http://wiki.python.org/moin/PythonGameLibraries Mange kommersielle spill skrives i C++ ja, men ofte fordi kodebasen allerede er skrevet i C++. Unity og Unreal er skrevet i C++. C++ er også mer flyttbart, samt at de fleste tredjeparts biblioteker er skrevet i C++. Nemlig. Det er ingen selvfølge at kode skrevet i C++ er raskere enn kode skrevet i for eksempel C#. Det omvendte er vel heller ingen selvfølge. C++ er omtrent en supermengde av C. Vet ikke om det samme kan sies om C#. Tallknusing kan godt skrives i C. Sparer noen klokkesykler på det. Microsoft has defined C# as follows C# is a simple, modern, object oriented, and type-safe programming language derived from C and C++. C# (pronounced C sharp) is firmly planted in the C and C++ family tree of languages, and will immediately be familiar to C and C++ programmers. C# aims to combine the high productivity of Visual Basic and the raw power of C++. However it is also undeniable that the two languages are very similar in both their syntax and in that they are both designed to facilitate the same paradigm of programming, in which code is based around hierarchies of inherited classes. Below I will briefly summarize the overall differences and similarities between the two languages. Kilde: http://www.c-sharpcorner.com/UploadFile/gtomar/ComparisionofCandcsharplanguages10242007013053AM/ComparisionofCandcsharplanguages.aspx Min utheving i det sitatet er nok til ikke å velge C#. Se for øvrig: C++ vs. C# - a Checklist from a C++ Programmers Point of View Endret 14. mars 2011 av Slettet+9871234 Lenke til kommentar
GeirGrusom Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 Min utheving i det sitatet er nok til ikke å velge C#. Se for øvrig: C++ vs. C# - a Checklist from a C++ Programmers Point of View Mono har en implementasjon av C# som er fullstendig uavhengig av Microsoft (faktisk støttet av Novell med Microsoft sin velsignelse) og støtter alle de samme språkmulighetene som Visual C# har. Det er open source, og er på full høyde med Microsoft .NET. En kan også peke på garbage collection som C# deler med Java, som faktisk er mer effektiv, og jeg vil påstå, mer egnet til spillutvikling enn C/C++ sin deterministiske minnebehandling. Denne bruker også compactor som rett og slett er defragmentering av minneområdet. Noe som ikke blir gjort i C++ ettersom dette ville krøllet til pekere og referanser. At du har et anti-microsoft handicap får være ditt problem. Lenke til kommentar
Gjest Slettet+9871234 Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 (endret) En kan også peke på garbage collection som C# deler med Java, som faktisk er mer effektiv, og jeg vil påstå, mer egnet til spillutvikling enn C/C++ sin deterministiske minnebehandling. Hm. Hvorfor ikke skrive sine egen garbage collection / destruktør rutiner? Det anbefales av profesjonelle programmerere. Anser meg selv som profesjonell programmerer. (Programmerte rentekontrollen for Finans Minister Rolf Presthus, overvåking av det norske banksystemet, det første programmet som ble brukt til å plassere - den gang 100 milliarder - Norges Banks valutareserver etc. etc.). Noe som ikke blir gjort i C++ ettersom dette ville krøllet til pekere og referanser. Såvidt jeg vet har ikke C# og Java de samme avanserte peker mulighetene som C++. Dinglende pekere er et velkjent problem. Foretrekker dermed å rydde opp i minnet ved å skrive destruktørene selv. Smarte http://ootips.org/yonat/4dev/smart-pointers.html og andre pekere er det som skiller C++ fra mange andre språk. Se også: http://www.informit.com/articles/article.aspx?p=31529 http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/smart_ptr.htm (Boost biblioteket er et av de mest renomerte C++ bibliotekene - ikke nødvendig å finne opp hjulet på nytt). At du har et anti-microsoft handicap får være ditt problem. Det er ikke hovedgrunnen. Jeg bruker daglig Microsoft sine produkter. Der lukter proprietært av C# lang vei til tross for ditt siste innlegg. C++ er etter mitt personlige syn et langt mer åpent og plattform uavhengig språk. C++ er mer portabelt. Endret 14. mars 2011 av Slettet+9871234 Lenke til kommentar
TheMaister Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 Skal nevnes at C++0x har mye av dette (boost) som standard. C++0x er en stor forbedring over C++98. support for anonymous functions på C# kan fjernes siden C++0x har lambdaer (svært fleksible sådan). Lenke til kommentar
GeirGrusom Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 C# er en ISO standard. Det er ingen grunn til å bruke C++ i et spill i dag. Det har liten betydning for hvor mange FPS du får. Det at mange bruker det er heller ikke et argument i utgangspunktet. Svært få bruker Python, er det et ubrukelig språk av den grunn? Lenke til kommentar
Gjest Slettet+9871234 Skrevet 14. mars 2011 Del Skrevet 14. mars 2011 Det er ingen grunn til å bruke C++ i et spill i dag. Hva med portabilitet? Du mener vel ikke at C# er like portabelt som C++? Det at mange bruker det er heller ikke et argument i utgangspunktet. Svært få bruker Python, er det et ubrukelig språk av den grunn? Poenget er at et skripting språk ofte kombineres med C++ for spillutvikling. Se mine tideligere innlegg. Python er et av de mest egnede skripting språkene til å kombineres med C++ til spillutvikling. I et fugle perspektiv, er Python en C while løkke. C++ er i det vesentlige en super mengde av C. ISO sertifisering er ikke noe argument. Jeg har hørt / lest at det skal være mulig å fylle en flytevest med sement og få den ISO sertifisert. Kanskje litt satt på spissen, Det virker som vi kun er enige om å være uenige. Lenke til kommentar
GeirGrusom Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 (endret) "Ingen grunn" er en overdrivelse fra min side. En god grunn er jo portabilitet som du nevner. C++ vil du uansett få til å fungere de aller fleste steder. Men hastighet i seg selv er ikke et argument. Men for entusiaster som skal utvikle et spill på egenhånd, så er det langt mer realistisk å bruke et annet språk enn C++. Dessuten er ikke C++ programmer portabelt i seg selv. Masse kode må skrives for hver plattform. For eksempel grafikk hvor Xbox 360 bruker Direct3D 9, mobilplattformer bruker OpenGL ES og PS3 bruker et proprietært API som jeg egentlig vet veldig lite om. Skal man utvikle et spill for xbox 360 kan en like gjerne bruke XNA. Fortrinnsvis bruker man en ferdig spillmotor. En sparer mye tid på det, men på småspill er det lite vits i. Når det gjelder C#: hva er kravet ditt for at et språk ikke skal være proprietært? At Microsoft ikke har rørt det? Det finnes Open Source implementasjoner av det, og Microsoft har klart og tydelig sagt at C# ikke er noe som de har noe patenter eller egne rettigheter på. Hva med Web? Ajax er noe som kom direkte ut av Internet Explorer 5. Endret 15. mars 2011 av GeirGrusom Lenke til kommentar
Gjest Slettet+9871234 Skrevet 15. mars 2011 Del Skrevet 15. mars 2011 (endret) Skal man utvikle et spill for xbox 360 kan en like gjerne bruke XNA. Fortrinnsvis bruker man en ferdig spillmotor. En sparer mye tid på det, men på småspill er det lite vits i. Jeg vet det. Skroll net til XNA: http://www.kjellbleivik.com/Books/GameDevelopment.php Og den ferdige spillmotoren er vel ofte programmert i C++. Uformelt kaller noen C++ "neste generasjons assembler". Hva med Web? Ajax er noe som kom direkte ut av Internet Explorer 5. AJAX (Asynchronous JAvaScript and Xml) er vel ikke noe nytt og der finnes ulike teknologier basert på iFrames, Frames med null areal samt XMLHttpRequest objektet som ganske riktig ble funnet opp av Microsoft. Google bruker hybride teknologier i noen av sine AJAX applikasjoner. Se også denne https://www.diskusjon.no/index.php?showtopic=1297476 (post #7) tråden for ytterligere informasjon. Endret 15. mars 2011 av Slettet+9871234 Lenke til kommentar
Datasmurf Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 (endret) Er det noen ikke-OOP-programmeringsspråk som er lette å lære seg? Er rimelig lei av å knote med OOP. Har forårsaket meg hodepine og grå hår i de siste månedene (actionscript 3.0 (både for flash og for flex) og diverse php) og jeg er lut lei. Kunne tenkt meg å lære meg et språk som ikke er objektorientert og som jeg kan dra nytte av senere i livet, til hva enn egentlig. Det være seg om jeg kunne tenkt meg å skrive kode til spill for Zunen min / den "gamle" Nokiaen min, eller små ikke-GUI-baserte applikasjoner for Windows. Tips? Endret 19. mars 2011 av Datasmurf Lenke til kommentar
Datasmurf Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 Da får vi se om jeg har mer flaks med det nå enn da jeg prøvde å lære meg det sist for 9-10 år siden (eller hva det nå var, kan ha vært lengre også). Lenke til kommentar
GeirGrusom Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 (endret) Jeg vil tørre å påstå at C er et av de enkleste språkene å lære seg. Det er ikke mange gotchas, språket er temmelig rett frem. Motsetning til Ruby, hvor 0 = true, eller Visual Basic sin håpløse implisitte konvertering av datatyper, eller PHP hvor noen funksjoner returnerer forskjellige primitive datatyper avhengig av resultat (dårlig programmeringsskikk spør du meg) og i C# må en være JÆVLIG obs på hvordan closures omslutter lokale variabler. Irrelevant uansett. C er enkelt og greit, men jeg tror du kommer til å savne objektorientering ^^ Endret 19. mars 2011 av GeirGrusom Lenke til kommentar
Gjest Slettet+9871234 Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 Jeg vil tørre å påstå at C er et av de enkleste språkene å lære seg. Bortsett fra at utskrift er knotete. Det er god nok grunn til å gå over til C++ som i det alt vesentlige er en supermengde av C. Lenke til kommentar
GeirGrusom Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 utskrift?... printf er da enkel i bruk... Lenke til kommentar
Gjest Slettet+9871234 Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 (endret) utskrift?... printf er da enkel i bruk... Jeg personlig synes cout og cin er enklere. Det går da fint an å bruke en C++ kompilator som om den var en C kompilator. Har du ikke hørt om den finske tømmerhuggeren som brukte håndsag og øks og pleide å hugge 20 trær/dag. Du må bruke en motorsag sa kameraten så kan du kutte 100 trær/dag. Ok, sa finnen og kjøpte seg en motorsag. Etter noen dager klagde han til kameraten og sa at nå kuttet han bare 5 trær/dag. Kameraten startet motorsagen for finnen og viste hvordan det skulle gjøres. Perkele, perkele utbrøt finnen. Brummar hon også? Endret 19. mars 2011 av Slettet+9871234 Lenke til kommentar
TheMaister Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 (endret) Jeg vil tørre å påstå at C er et av de enkleste språkene å lære seg. Bortsett fra at utskrift er knotete. Det er god nok grunn til å gå over til C++ som i det alt vesentlige er en supermengde av C. Utskrift knotete i C? Synes <iostream> er mye mer knot siden den oppfører seg som en weird state machine med tanke på ting som "%.2f" i C osv. Det eneste negative med stdio er at printf, osv ikke er typesafe, men i praksis hjelper kompilatorer og sjekker types for deg med warning. <iostream> er ikke god nok grunn til å gå over til C++, da tenker jeg heller på namespaces, templates, STL, osv. Error handling med iostream er også awkward. // C printf("%d + %d = %d\n", 1, 2, 3); // C++ iostreams std::cout << 1 << " + " << 2 << " = " << 3 << std::endl; Allerede på helt trivielle eksempler som dette er det mer kode i iostreams og jeg tør påstå vanskeligere å forstå. Legger man til f.eks %02d, osv blir det veldig grisete ... Endret 19. mars 2011 av TheMaister Lenke til kommentar
GeirGrusom Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 Det går da fint an å bruke en C++ kompilator som om den var en C kompilator. Har du ikke hørt om den finske tømmerhuggeren som brukte håndsag og øks og pleide å hugge 20 trær/dag. Du må bruke en motorsag sa kameraten så kan du kutte 100 trær/dag. Ok, sa finnen og kjøpte seg en motorsag. Etter noen dager klagde han til kameraten og sa at nå kuttet han bare 5 trær/dag. Kameraten startet motorsagen for finnen og viste hvordan det skulle gjøres. Perkele, perkele utbrøt finnen. Brummar hon også? Selv ville jeg også valgt C++ over C når som helst, men han var ute etter prosedyre-basert språk. Du kan jo unngå å bruke klasser i C++ også, så det er jo et alternativ. Men du kan normalt ikke kompilere et C program i C++ uten å sette kompilatoren i C-modus. Lenke til kommentar
Gjest Slettet+9871234 Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 (endret) Utskrift knotete i C? Hvorfor skal jeg gå rundt å huske dette (se også eksempelet som starter med #include <stdio.h> int main(void) etter kommetaren /* ... */) /* From K&R II page 15: %d print as decimal integer %6d print as decimal integer, at least 6 characters wide %f print as floating point %6f print as floating point, at least 6 characters wide %.2f print as floating point, 2 characters after decimal point %6.2f print as floating point, at least 6 wide and 2 after decimal point From K&R II page 20: count characters in input; 2nd version #include <stdio.h> main() { double nc; for (nc = 0; gechar() != EOF; ++nc) ; printf("%.0f\n", nc); } printf uses %f for both float and double; %.0f suppresses the printing of the decimal point and the fraction part, which is zero. The body of this for loop is empty, because all the work is done in the test and increment parts. But the grammatical rules of C require that a for statement have a body. The isolated semicolon, called a null statement, is there to satisfy that requirement. We put it on a separate line to make it visible. From K&R II page 37: The complete set of escape sequences is \a alert (bell) character \\ backslash \b backspace \? question mark \f formfeed \' single quote \n newline \" double quote \r carriage return \ooo octal number \t horizontal tab \xhh hexadecimal number \v vertical tab From K&R II page 50: 3.1 Statements and Blocks An expression such as x = 0 or i++ or printf(...) becomes a statement when it is followed by a semicolon, as in x = 0; i++; printf(...); In C, the semicolon is a statement terminator, rather than a separator as it is in languages like Pascal. Braces { and } are used to group declarations and statements together into a compound statement, or block, so that they are syntactically equivalent to a single statement. The braces that surround the statements of a function are one obvious example; braces around multiple statements after an if, else, while, or for are another. (Variables can be declared inside any block; we will talk about this in Chapter 4.) There is no semicolon after the right brace that ends a block. From K&R II page 51: 3.3 Else-If The construction if (expression) statement else if (expression) statement else if (expression) statement else if (expression) statement else statement occurs so often that it is worth a brief separate discussion. This sequence of if statements is the most general way of writing a multi-way decision. The expressions are evaluated in order; if an expression is true, the statement associated with it is executed, and this terminates the whole chain. As always, the code for each statement is either a single statement, or a group of them in braces. From K&R II page 52-53: 3.4 Switch The switch statement is a multi-way decision that tests whether an expression matches one of a number of constant integer values, and branches accordingly. switch (expression) { case const-expr: statements case const-expr: statements default: statements } Each case is labeled by one or more integer-valued constants or constant expressions. If a case matches the expression value, execution starts at that case. All case expressions must be different. The case labeled default is executed if none of the other cases are satisfied. A default is optional; if it isn't there and if none of the cases match, no action at all takes place. Cases and the default clause can occur in any order. In Chapter 1 we wrote a program to count the occurrences of each digit, white space, and all other characters, using a sequence of if ... else if ... else. Here is the same program with a switch: #include <stdio.h> main() //count digits, white space, others { int c, i, nwhite, nother, ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; i++) ndigit[i] = 0; while ((c = getchar()) != EOF) { switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ndigit[c-'0']++; break; case ' ': case '\n': case '\t': nwhite++; break; default: nother++; break; //Not needed, but good programming practice. } } printf("digits ="); for (i = 0; i < 10; i++) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); return 0; } The break statement causes an immediate exit from the switch. Because cases serve just as labels, after the code for one case is done, execution falls through to the next unless you take explicit action to escape. break and return are the most common ways to leave a switch. A break statement can also be used to force an immediate exit from while, for, and do loops, as will be discussed later in this chapter. Falling through cases is a mixed blessing. On the positive side, it allows several cases to be attached to a single action, as with the digits in this example. But it also implies that normally each case must end with a break to prevent falling through to the next. Falling through from one case to another is not robust, being prone to disintegration when the program is modified. With the exception of multiple labels for a single computation, fall-throughs should be used sparingly, and commented. As a matter of good form, put a break after the last case (the default here) even though it's logically unnecessary. Some day when another case gets added at the end, this bit of defensive programming will save you. From K&R II page 53 -54: The for statement for (expr1; expr2; expr3) statement is equivalent to expr1; while (expr2) { statement expr3; } except for the behaviour of continue, which is described in Section 3.7. Grammatically, the three components of a for loop are expressions. Most commonly, expr1 and expr3 are assignments or function calls and expr2 is a relational expression. Any of the three parts can be omitted, although the semicolons must remain. If expr1 or expr3 is omitted, it is simply dropped from the expansion. If the test, expr2, is not present, it is taken as permanently true, so for (; { ... } is an ``infinite'' loop, presumably to be broken by other means, such as a break or return. Whether to use while or for is largely a matter of personal preference. For example, in while ((c = getchar()) == ' ' || c == '\n' || c = '\t') ; // skip white space characters there is no initialization or re-initialization, so the while is most natural. The for is preferable when there is a simple initialization and increment since it keeps the loop control statements close together and visible at the top of the loop. This is most obvious in for (i = 0; i < n; i++) ... which is the C idiom for processing the first n elements of an array, From K&R II page 50: From K&R II page 50: */ #include <stdio.h> int main(void) { int i=0, years[3001]; while (i<3001) { years[i]=i; ++i; } printf("\n\n"); printf("Some output formatting: "); printf("\n\n"); for (i= 2000; i < 2100; i++) printf("%6d%c", years[i], (i%10==9 || i==99) ? '\n' : ' '); printf("\n\n"); for (i= 2100; i < 2200; i++) printf("%6d\t", years[i], (i%10==9 || i==99) ? '\n' : ' '); printf("\n\n"); for (i= 2000; i < 2101; i++) if ((years[i] % 4 == 0 && years[i] % 100 != 0) || years[i] % 400 == 0) printf("%d is a leap year\n", years[i]); else printf("%d is not a leap year\n", years[i]); return 0; } Jeg står ved mitt forrige innlegg, men smak og behag kan som kjent ikke diskuteres. Endret 19. mars 2011 av Slettet+9871234 Lenke til kommentar
Datasmurf Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 Irrelevant uansett. C er enkelt og greit, men jeg tror du kommer til å savne objektorientering ^^ Nåh, skeptisk. Jeg ble så lei objektorientering at jeg på eksamensoppgaven min gikk fra AS3.0 og tilbake til 2.0. Lenke til kommentar
GeirGrusom Skrevet 19. mars 2011 Del Skrevet 19. mars 2011 Formatering er litt enklere i printf synes jeg Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå