- Simon Edwardsson
- Medlem ●
Jag är lite fundersam. Jag vill utveckla lilte mindre spel och program till MacOSX.
Men jag vet inte i vad.
Jag har programmerat i:
*Basic Slutade ganska tidigt lärde mej bara grunderna
*Php Det språk jag kan mest i, ganska duktig *lol*
*C Vet inte så mycket, kan grunderna. Har använt toolbox.
*Html Ganska lätt, inte sant?
*Java Grunderna där också.
Vad kan man gör med min lilla lista.
Jag vill inte göra program som man kör i Classic.
Jag tänkte mig att mitt första spel skulle bli "snake". Jag har hört talas om OpenGL, är det bra? Java är väl ganska långsamt om jag minns rätt.
Och så tänkte jag utnyttja Project Builder så mycket som det går.
Och vilka böcker/sidor ska jag använda mig för att fördjupa mig i det språk som passar bäst?
[ 24. Januari 2003, 16:54: Meddelandet ändrat av: Simon Edwardsson ]
Mitt personliga val skulle bli Java. Hastigheten räcker gott och väl till, och det är ett väldigt trevligt språk att jobba i.
Objective-c verkar vara ett intressant språk, och gäller det programmering enbart för Mac så tror jag det fungerar utmärkt. Men jag har ingen personlig erfarenhet av Objective-c eller programmering på Mac. Enbart vad jag hört!
Lycka till, oavsett vilket språk du än väljer
Jag måste språka för Cocoa och Objective-C. Det är bara så underbart och enkelt.
Har ingen aning om hur det är att koda spel i det, men OpenGL är inga problem.
Installera utvecklingsverktygen och kolla på Objective-C tutorial i /Developer/Documentation/Cocoa/ObjCTutorial.
Angående java så är Objective-C och Cocoa gjorda för varandra, man förlorar mycket på att använda Java. All vanlig c-kod funkar för övrigt i Objective-C.
Angående böcker så har jag köpt två olika:
Learning Cocoa - O´Reilly
Cocoa programming for Mac OS X - Aaron Hillegass
Den sistnämda är riktigt bra, utmärkt som både tutorial och reference.
[ 23. Januari 2003, 22:37: Meddelandet ändrat av: Fredrik Sigbjörn ]
Eftersom de språk du räknar upp inte har några större skillnader så är det väl enklast att du håller dig till imperativa (C, Basic, Fortran, Modula-2, etc) eller objektorienterade (C++, Objective C, Java, REALbasic, etc). Jag skulle säga att du skulle titta på REALbasic eller Objective-C.
Okej det står två till object-C och två till java.
Hur skulle man skriva ett snake spel i object C och hur skulle man göra i java(inte själva koden utan bara principen).
(funderar på att köpa Cocoa programming for Mac OS X men jag vet ännu inte)
Principen är den samma (för Objectiv C, C++ och Java) det är bara frågan om hur du skriver ner din lösning. C blir lite annorlunda eftersom du antagligen skulle bygga lösningen på olika datastrukturer istället för objekt.
Om jag omformulerar frågan; vilket är lättast att skriva i/effektivast.
Som sagt jag tänkte börja med ett snake, sedan kanske ett space invaders och efter det ett littet rpg.
Om jag väljer java/object C; vart får jag info på hur jag gör ett sådant spel. (böker/sider på nätet etc)
http://www.cocoadevcentral.com/
http://www.macdevcenter.com/
Och en sida för spelutvecklare (Mac)
http://www.idevgames.com/
citera:Skapades ursprungligen av: Simon Edwardsson:
Om jag omformulerar frågan; vilket är lättast att skriva i/effektivast.
Som sagt jag tänkte börja med ett snake, sedan kanske ett space invaders och efter det ett littet rpg.
Om jag väljer java/object C; vart får jag info på hur jag gör ett sådant spel. (böker/sider på nätet etc)
Det språk som är utan jämförelse lättast att skriva i, som ger lika snabba program som C på halva tiden, har C-maffian baktalat sönder så man knappt vågar tala om att man gillar det längre. Dessutom släpar det efter allt värre på utvecklingsverktygen, så överlägsenheten är inte så stor längre...
C är Algol (i och för sej ett fint språk på sin tid, urfadern till de flesta moderna språk) men med snårigare syntax, svårläst och gjort för att det ska vara lätt att göra fel. Programmeringsspråkens svar på PC.
C++ är C-maffians försök att plagiera begreppet objektorientering och göra det till sitt. Resultatet är objektorientering med samma snåriga syntax som C och med samma förmåga att dölja fel.
Java har samma djävliga syntax, men kan å andra sidan hitta fel självt... och rapporterar dem till dej på ett sätt som är fullständigt obegripligt. Garbage collection är elegant, men fungerar dåligt under Windows. Java är fruktansvärt långsamt. En enkel animation fick min G4/733 att gå på knäna. Sky som pesten om du vill ha nån grafik som rör på sej.
Python är ett språk på frammarch. Interpreterat, dvs långsamt. Bra syntax, helt överlägsen C/C++ och Java.
Nåväl, i praktiken... Om du utvecklar för OSX så vill du antagligen använda Project Builder. Där har du C och Java. Glöm Java, för vill göra nånting med animerad grafik. Kvar är C med dess OO-hybrider, om du inte vill vara en hårding och hämta alternativa kompilatorer från nätet. Det lär finnas en Ada för Project Builder numera. Det är faktiskt så jag är riktigt intresserad själv, för det lär vara ett vettigt språk! "Språket som alla hatar utom de som vet nånting om det."
[ 10. februari 2003, 22:04: Meddelandet ändrat av: Ingemar Ragnemalm ]
Java på mac smakar trist :/ Platformsoberoendet verkar handla om SunOS och Windows tyvärr. hade Java på mac funkat som det borde så hade det ju varit ok att koda i(skrev en 3d-rastrerare för några år sen för pc/java och det gick ganska snabbt faktiskt)
C är väl det enda som ger lite vettig hastighet på Mac (IMHO) men du kan ju gott använda Obj-C/Cocoa till lite fönster/GUI jox. Obj-C lär man sig grunderna i snabbt. Apples Core-grejs (C API)för grafik är inte heller helt hemskt. Testa.
En annan variant är ju att använda sig av SimpleDirect media Layer (SDL) för att fixa sig en rityta mm.
Vettigaste lösningen är kanske i längden att köra sånt som ska vara snabbt i vanlig C och binda AI etc till ett scriptspråk (alltså interpreterat) som ex Python, Lua eller Ruby. Detta är väl iofs lite överkurs...
pja, ngn hjälp kan det kanske vara.
btw, Ingemar, pratar du om Pascal?
Är jag helt ute och cyklar här? Är inte Java ett interpreterande språk medan C kompileras? Finns det någon vettig javakompilator till macen? Om det är på det sättet är väl C det enda alternativet då java skulle bli odrägligt långsamt att köra?
Jag har inte koll riktigt på var man sätter gränserna men Java kompilerar man ju till bytecode som man sedan kör på en virtuell maskin. det är väl på sätt och vis interpreterande, men normalt så kallar man väl bara språk interpreterande om "de körbara" filerna är i textformat. Eller?
annars skulle man ju kunna kalla det mesta för interpreterande... en kompilerad C-kod är råkar ju bara vara processorspecifik. Alltså man kan ju väl göra en virtuell maskin som tolkar motorola PPC instruktioner (fast då säger man väl emulering...)
Någon som kan gränserna bättre? Skulle vara intressant att veta vad man brukar säga...
Java är ett kompilerat språk, men sedan ligger det ett lager mellan programmet och OS:et, jag tror det heter Java virtual machine, så på sätt och vis är det också emulerat. JVM är väl tänkt att vara som ett mini-OS och denna är speciellt skriven för varje plattform.
Men för den som programmerar ska det fungera som ett kompilerat språk och innebära att man skriver koden och kompilerar den en enda gång...
Det är verklige synd att det är så långsamt på mac... Jag testade ett nätverksspel kallat Robots en gång på både pc och mac. På macen masade sig figurerna fram i ultrarapid och på pc gick det undan så att det visslade om det...
citera:Skapades ursprungligen av: Leander Lindahl:
Java är ett kompilerat språk, men sedan ligger det ett lager mellan programmet och OS:et, jag tror det heter Java virtual machine, så på sätt och vis är det också emulerat. JVM är väl tänkt att vara som ett mini-OS och denna är speciellt skriven för varje plattform.
Men för den som programmerar ska det fungera som ett kompilerat språk och innebära att man skriver koden och kompilerar den en enda gång...
Det är verklige synd att det är så långsamt på mac... Jag testade ett nätverksspel kallat Robots en gång på både pc och mac. På macen masade sig figurerna fram i ultrarapid och på pc gick det undan så att det visslade om det...
Java är ganska segt på PC också, jämfört med kompilering till maskinkod, trots JIT-tricket (just-in-time-kompilering som påstås kompilera om mellankoden till maskinkod). Jag misstänker att de stora klassbiblioteken och deras dåliga grafikstöd är en stor del av problemet.
Jag kallar Java interpreterat, för det interpreterar en mellankod. Att interpretera källkoden direkt är inte segt, det är jättesegt.
ALLA språk som kompilerar till maskinkod har potential att vara lika snabba, fast även där kan snåriga klassbibliotek förstöra mycket. Språken själva har nästan garanterat GCC´s backend i alla fall.
citera:Skapades ursprungligen av: Simon Edwardsson:
Okej det står två till object-C och två till java.
Hur skulle man skriva ett snake spel i object C och hur skulle man göra i java(inte själva koden utan bara principen).
(funderar på att köpa Cocoa programming for Mac OS X men jag vet ännu inte)
Om du vill göra ett robust och logiskt korrekt program, lär dig lte om "Design patterns" och "realtidsprogrammering".
(C++, Java, Objectiv C, Ada, ... spelar ingen roll).
Mitt favoritspråk är Ada. (Används i bl.a. Boeings flygplan, Nasa, ...).
Om man ska programmera nånting så är det flera saker man behöver reda ut, t.ex. vad är jag ute efter? Hur mycket tid är jag villig att lägga ner på att lära mig språket, biblioteken, etc? Vilka tidigare kunskaper har jag? Vilka utvecklingsmiljöer finns det? Vilka krav på prestanda finns det? Skriver jag för mig själv eller för andra? Engångshack eller nåt som ska support under en längre tid? Vilka plattformar etc?
Java är ett trevligt språk men jag vet inte om jag är helt överförtjust i alla biblioteken, det finns också klara prestandaproblem.
C kan ju vara kul men jag skulle definitivt rekommendera ett objektorienterad språk iställe.
C++ kan ju vara intressant, det går att göra en del kul saker men det är inget språk jag skulle rekommendera om man vill programmera "på kul" (och jag skulle vara försiktig även om det gäller "på riktigt"), Kräver mycket erfarenhet och deciplin för att undvika problem.
Objective-C ... också en C variant men kanske lättare att undvika trassel än C++
REALbasic, klart underskattat. Har en del problem i språkdesignen (men de jobbar på det). Det enda gemensamma med traditionell basic är namnet och möjligheten att skriva "REM" och "dim" ... annars helt objektorienterat och kan väl bäst liknas vid nån sort objektorienterad Pascal eller Java med annorlunda syntax (och mer begränsad syntax i dagläget).
Sedan finns det en hel del andra språk man kan använda som t.ex. Perl, Python, Ruby och PHP, men jag skulle satsa på RB eller Objective-C (eftersom det är gratis)
Objektorientering är en gravt överskattad teknik som bygger på myten om återanvändbar kod. Ett dåligt program är sämre än ett välskrivet oavsett om det ena eller det andra använder OO-grepp, eller OO-utvidgningar i språk, eller ej.
OO bryter mot regeln KISS, "Keep it simple, stupid". Rätt metod är att att lösa problemet på ett så rättframt och enkelt sätt som möjligt. För vissa problem passar objektorientering. Då ska man använda det.
Men märk väl att ett program skrivet i C kan vara objektorienterat medan ett skrivet i C++ kan vara icke objektorienterat. C++ såväl som Pascal är språk som inkluderar OO-funktioner, men man måste inte använda dem, och det blir inte OO bara för att man deklarerar en struktur som en klass.
Jag vet att det här är hädelse för medlemmar i OO-kyrkan, som hävdar att allting måste vara objekt annars är det syndigt och orent och ger inte den Heliga Återanvändbarheten.
Jag föredrar "KISS"-principen. Det är en princip som ger enkel, läsbar och lättunderhållen kod. KISS ger faktiskt MER återanvändbar kod än OO, för koden blir lättare att ta ur sitt sammanhang när en enkel process inte styckas upp i en massa småsnuttar i en klasshierarki.
OO använder jag gärna och ofta - när det behövs!
Jag håller inte med i allt du skriver:
Objektorientering är en gravt överskattad teknik som bygger på myten om återanvändbar kod.
Jag vill inte påstå att det är en myt, återanvändbar kod är bra ... därimot är det oftast svårare att skriva sådan kod än vad de flesta tror och ibland ska man kanske inte alls satsa att göra det
Ett dåligt program är sämre än ett välskrivet oavsett om det ena eller det andra använder OO-grepp, eller OO-utvidgningar i språk, eller ej.
Det är väl självklart (och jag håller inte med om att OO bryter mot KISS)
Men märk väl att ett program skrivet i C kan vara objektorienterat medan ett skrivet i C++ kan vara icke objektorienterat.
Jo, man kan skriva modulariserad kod i C som närmar sig gränsen för OO men inte kan du skriva OO-kod i C om du inte anstränger dig väldigt hårt (jag vill alltså ha med arv etc för att klassa det om OO) och min gissning är att går man så långt så har man nog valt fel språk för ändamålet.
Sedan kan jag glatt gå med på att C++ program inte behöver vara objektorienterade ... sådana finns det många bra exempel på
C++ såväl som Pascal är språk som inkluderar OO-funktioner,
Vad för Pascal tänker du på och vilka OO-funktioner tänker du på?
det blir inte OO bara för att man deklarerar en struktur som en klass.
Helt riktigt
Jag vet att det här är hädelse för medlemmar i OO-kyrkan, som hävdar att allting måste vara objekt annars är det syndigt och orent och ger inte den Heliga Återanvändbarheten.
Det är väl ingen hädelse utan snarast välkända fakta, att skriva bra OO kod är ingen lätt historia utan det krävs både erfarenhet och insikt för att man ska få det bra, men lyckas man så funkar det mycket bra.
Å andra sidan så betyder det inte att ett program blir bättre för att man använder C, PAscal, Modula-2, eller nåt annat språk. Inte heller att program skrivet i C är snabbare än ett skrivet i Java, etc ... det hänger mest på *VEM* som har skrivit och designat koden.
Jag föredrar "KISS"-principen. Det är en princip som ger enkel, läsbar och lättunderhållen kod. KISS ger faktiskt MER återanvändbar kod än OO, för koden blir lättare att ta ur sitt sammanhang när en enkel process inte styckas upp i en massa småsnuttar i en klasshierarki.
Här håller jag inte alls med, dvs är OO inte är KISS. För mig fungerar det tvärtom, jag upplever vanlig imperativa språk som begränsade (åtmistone för sånt jag håller på med nu) och det funkar inte alls för mig att skriva nåt sånt.
Och har man en "enkel process" så är det antagligen så att den inte behöver ska styckas upp i en massa klasser och har man gjort det kanske felet ligger i designen istället för vid implementeringen.
(Jodå, jag använder imperativa språk när det behövs men för det mesta föredrar jag OO)
Tycker du tar och lär dig Java Simon. Enkelt att få hjälp när du behöver det. Både av pc och macfolk.
Skall du dock skriva grafik, tex spel. Så rekomenderar jag en bra dator, G4 800 el dyl, för annars kommer det tyvärr gå för segt.
Det enda problemet är editor. Skall du skriva i Project Builder så blir det inte platformsoberoende, och du kan nog inte använda de vanliga Java API:erna för grafik.
Borland JBuilder är nog det bästa valet. Bäst är nog föresten att skriva i em vanlig texteditor och kompilera i terminalen. Då lär man sig bäst.
Gärna en med syntax-färgkodning. BBedit är bra.
citera:Skapades ursprungligen av: Jan Erik Moström:
Vad för Pascal tänker du på och vilka OO-funktioner tänker du på?
Klasser och ärvning i första hand, vilket alla seriösa Pascalkompilatorer som skrivits de senaste tjugo åren har (dvs redan innan C++ existerade - överraskning?). Minst en av de nyaste har operator overloading också, men det kan man knappast kalla standard än.
citera:Skapades ursprungligen av: Fredrik Sigbjörn:
Skall du dock skriva grafik, tex spel. Så rekomenderar jag en bra dator, G4 800 el dyl, för annars kommer det tyvärr gå för segt.
Det enda problemet är editor. Skall du skriva i Project Builder så blir det inte platformsoberoende, och du kan nog inte använda de vanliga Java API:erna för grafik.
Project Builder går fint, plattformsoberoende blir det visst om man bara lurar ut hur man packar upp klasserna på en PC. Däremot är Java på en G4/733 med OSX långsammare än att skriva "riktig" kompilerad kod som körs på en IIsi. Under MacOS9 och CodeWarrior går det lite snabbare (bara 10x lågsammare ungefär), men där har man en lite väl gammal Javaversion.
Jag skojar inte. Jag ser själv hur segt en enkel animering går. Fast när PC´n efter en stund knäcker ihop för att den har minnesläckor så får man i alla fall lite tröst - det funkar inte bra där heller!
Frågan är förstås om JBuilder på nåt sätt kan skrämma mer fart i koden, men jag skulle hellre satsa på en konventionell kompilator, t.ex. C (genom SDL för portabilitet) eller liknande.
citera:Skapades ursprungligen av: Ingemar Ragnemalm:
Klasser och ärvning i första hand, vilket alla seriösa Pascalkompilatorer som skrivits de senaste tjugo åren har (dvs redan innan C++ existerade - överraskning?). Minst en av de nyaste har operator overloading också, men det kan man knappast kalla standard än.
Det var visserligen ett tag sedan jag använde Pascal men ingen av de jag använde då hade dessa möjligheter. Men, men saker händer ju
Jag skulle t.ex. säga att REALbasic är mer likt Pascal är Basic.
Jag tror inte att plattformsberoende Java (Cocoa-native Java App) är extremt långsamt. Kort sagt, om man vill lämna flerplattformskravet (vilket Simon aldrig hade som krav) så går det bra att skriva Javaprogram för Mac OS X med hyffsad fart. Java-Cocoa är tom första klassens medborgare i Mac OS X.
Måste passa på att fråga, vad är det som är bra med RealBasic förutom en lite mindre tröskel för inlärningen? De stackars applikationer jag sett som varit gjorda med RB har varit ganska stora, otympliga och långsamma.
Om man ändå ska lära sig ngt språk kan man väl lika gärna passa på att lära sig ett språk som mer eller mindre är världsstandard och dessutom har hyfsat bra kompilatorer även på mac. (jag syftar på C)
Det sköna med C är ju dessutom att språket i sig är ganska litet syntaxmässigt så man inte behöver hålla så mycket i skallen.
Använder man ett lib som SDL och OpenGL blir ju dessutom källkoden väldigt portabel även för grafikintensiva program.
När det gäller C++ behöver man ju faktiskt inte använda allt skumt jox där heller. Det räcker ju med att plocka ur de delar man verkligen behöver.
Visst kan det vara fräsigt med templates, friends och multipla arv men håller man inte tungan rätt i mun sitter man plötsligt där med tusentals rader kod som man knappt fattar själv. usch. (för att inte tala om hemska länkningsfel....)
Java har ju lite stramare tyglar och själv har jag inget emot syntaxen men som sagt, prestandan lämnar ju hel del att önska. Java var ju ett coolt "buzzword" språk för ett par år sen och har väl sitt användningsområde fortfarande men att använda det för att programmera spel är ju att tigga om problem och dunka-huvudet-i-bordet-beteende...
Visserligen finns det folk som har gjort mycket häftigt i Java (se tex www.sumea.com) men jag utgår att vi pratar Mac OSX som platform här och då tycker jag att man inte kan påpeka starkt nog hur undermåligt Java är
Alltså: satsa på C (möjligtvis med lite C++) och tillhörande bibliotek som SDL och OpenGL. Lägg eventuellt till en viss hjälp av Obj-C/Cocoa för fönsterhantering/systemjox.
Allt detta är ju med från början med OSX så det är ju bara att köra igång. Inga dyra program att fixa eller leta efter.
(för övrigt har du ju också python och ruby och lua(? eller installerade jag det själv?) inbyggt så dom kan du ju också mixtra med.
Ni som rekomederar andra grejor, varför betala runt 2000 spänn för BBedit ? lika mycket för RealBasic ? etc? När det ingår verktyg som är skitbra från början? ( Kommer inte ihåg vad de kostade om man köpte dom till nextstep men det var många tusen...)
ang. ace inlägg..... visst, klart snake går att göra så det funkar (förutsätter jag) men varför börja med att gå in på ett sidospår som leder utför en lång hal brant som slutar i giftig pöl? (med vassa rostiga spikar i)
Första klassens medborgare? För att det funktionsmässigt fungerar? Hillegass säger i sin ( utmärkta! ) bok ngt om "använd bara Java/Cocoa om du har ett väldigt speciellt skäl. Undvik i övrigt"
Filip, du oroar dig för fel saker tror jag.
Simon vill skriva ett spel till Mac OS X. Det skall bli en masken-klon. Enligt Simons webbsida om sig själv är han 14 år.
Skall man skriva ett komersiellt fps-spel med banbrytande grafiska effekter är prestanda en viktig faktor. Skall man skriva ett backoffice-system för en bank som skall hålla i 20+ år så är portabilitet, underhåll och stabilitet viktiga faktorer.
Simons projekt syftar till helt andra saker och har totalt olika risker. Jag tror systemutvecklingslitteratur (med rätta) helt struntar i att fokusera på dom frågeställningarna. Jag tror att målet för Simon är att ha kul och lära sig. Jag tror att den största risken med hans projekt är att han kör fast för att han har valt en för svår teknisk miljö, och det därmed blir tråkigt och han slutar.
[ 11. februari 2003, 21:04: Meddelandet ändrat av: ace4711 ]