| Autor |
|
|
|
|
71 Beiträge - Forenkenner

|
Betriebsystem: Win7 X64 Ultimate RC Browser: Firefox
|
|
Hi ersmal, bin Progger in Ausbildung und möchte hier Aufgaben ausser Schule wenigstens etwas Sinn geben und poste sie hiermit mal, damit der eine oder andere auch Lust bekommt, mal was zu proggen
So, hier mal mein 20min Tic TacToe für C. Hatt zwar keine KI und ist auch nur Textbasiert, halt eben 20min
War inner Schule, Lehrer hatt gedacht, jetzt hatt er mich beschäftigt
Wer an C interessiert ist: C von A bis Z Openbook
Hier mal der Screenshot des fertigen Programms, als ide inner Schule hammer immo CodeBlocks mit GNU Compiler

Also erstmal die Überprüfungsfunktion, ist leider nicht variabel programmiert, aber kanns noch umschreiben, falls wer Bedarf hatt.
| Code: | |
| | //int ist der Typ, der zurückgegeben werden soll, sonst void, wenn nichts zurückgegeben wird
| | int checkPlayFieldForWin(int spieler){
| | //i und b unglückliche Namen für X und Y und isWinner is ne Boolsche, 1 = True, 0 = False
| | int i, b, isWinner = 1;
| |
| | //Horizontal
| | for(i=0;i<3;i++){
| | if(playField[i][0] == spieler - 1 && playField[i][1] == spieler -1 && playField[i][2] == spieler - 1){
| | isWinner = 0;
| | i = 3;
| | }
| | }
| | if(isWinner == 1){
| | //Vertikal
| | for(i=0;i<3;i++){
| | if(playField[0][i] == spieler - 1 && playField[1][i] == spieler -1 && playField[2][i] == spieler - 1){
| | isWinner = 0;
| | i = 3;
| | }
| | }
| | //oben links to unten rechts
| | }else if(isWinner == 1){
| | if(playField[0][0] == spieler -1 && playField[1][1] == spieler - 1 && playField[2][2] == spieler - 1){
| | isWinner = 0;
| | i = 3;
| | }
| | //unten links to oben rechts
| | }else if(isWinner == 1){
| | if(playField[0][2] == spieler -1 && playField[1][1] == spieler - 1 && playField[2][0] == spieler - 1){
| | isWinner = 0;
| | i = 3;
| | }
| | }
| | //Ob jemand gewonnen hatt
| | return isWinner;
| | }
| |
|
|
|
|
Die ist relativ einfach aufgebaut, erweiterbar wärs noch mit n Spalten, Zeilen und anzahl nötige Steine Like This:
| Code: | |
| | //vertikal
| | int anzahlStonesForWin = 3, anzahlSpalten = 3, anzahlZeilen = 3;
| | for(i=0;i<anzahlZeilen;i++){
| | for(b=0;b<anzahlStonesForWin;b++){
| | if(playField[b][i] == spieler - 1){
| | isWinner = 0;
| | }
| | }
| | }
| |
|
|
|
|
So, dann die grafische Ausgabe.
Sagen wir mal, _ sei leer. X O Standard für die beiden Spieler
Tipp: Spielerwechsel ganz einfach, indem man Modulo nimmt: spieler = spieler%2 + 1;
Das heisst, wir bekommen dann irgendwann diese Funtkion:
| Code: | |
| | int printPlayField(void){
| | int i, b;
| | for(i=0;i<3;i++){
| | for(b=0;b<3;b++){
| | if(b<2){
| | switch(playField[b][i]){
| | case -1: printf("_t");
| | break;
| | case 0: printf("Xt");
| | break;
| | case 1: printf("Ot");
| | break;
| | }
| | }else{
| | switch(playField[b][i]){
| | case -1: printf("_n");
| | break;
| | case 0: printf("Xn");
| | break;
| | case 1: printf("On");
| | break;
| | }
| | }
| | }
| | }
| | }
| |
|
|
|
|
Diese Wandelt den spieler in das korrekt Zeichen um. Leider auch nicht variabel programmiert, da quick and dirty, but runnig without most of bugs.
Dann noch die main und wir haben ein TicTacToe in C:
| Code: | |
| | int playField[2][2];
| |
| | int main()
| | {
| | int i,b, spieler = 2, win, x, y;
| |
| | for(i=0;i<3;i++){
| | for(b=0;b<3;b++){
| | playField[i][b] = -1;
| | }
| | }
| |
| | printf("TicTacToen");
| |
| | do{
| | spieler = spieler%2 + 1;
| |
| | printf("Spieler%i ist am Zug!n", spieler);
| | printf("yn");
| | scanf("%i",&y);
| | fflush(stdin);
| | printf("xn");
| | scanf("%i", &x);
| | fflush(stdin);
| |
| | while(x > 2 || x < 0 || y > 2 || y < 0 || playField[x][y] != -1){
| |
| | printf("Falsche Koordinaten, 0, 1 ,2 sind erlaubt!!n");
| | printf("Spieler%i ist am Zug!n", spieler);
| | printf("yn");
| | scanf("%i",&y);
| | fflush(stdin);
| | printf("xn");
| | scanf("%i", &x);
| | fflush(stdin);
| |
| | }
| |
| | playField[x][y] = spieler - 1;
| |
| | printPlayField();
| | win = checkPlayFieldForWin(spieler);
| |
| | if(win == 0){
| | printf("Spieler%i hatt gewonnen!", spieler);
| | }
| |
| | }while(win != 0);
| |
| | system("PAUSE");
| | }
| |
|
|
|
|
Werd es nochmal etwas umbauen, keine Globale variabel mehr(Böse, da bad for paralell programming) und die anderen Funktion variabel gestalten und die Standard wiederholungsroutine.
Auch kann ich das ganze Dingens erklären, falls wer fragen hatt;)
BTW: C ist nicht das, was wirklich spass macht, wer mal lust hat, kann mit small Basic anfangen zu proggen, iss ganz easy. Einfach nie auf vba einlassen, sondern dann gleich auf VB.net.
Der Post wurde 1 mal editiert, zuletzt von climbing93 am 01.05.2010 - 00:57.
|
Beitrag vom 01.05.2010 - 00:57 Beitrags-Nr: 25916 |
|
|
|
| Re: Climbings little C tut |
|
|
Freier Mitarbeiter 299 Beiträge - Forentipper

|
|
|
Hi climbing.
Du hast das eigentlich schön selbstkritisch kommentiert "Switch" ist wirklich quik 'n dirty
Find das gut, dass ihr direkt Wert auf paralell programming legt.
Findest small Basic wirklich so toll?
Ich habe die Erfahrung gemacht, dass man mit C eigentlich super anfangen kann programmieren zu lernen um dann im Anschluss Objekt-Orientiert zu lernen. Gerade Zeigerarythmetik finde ich bei C ein wenig eklig, aber ist dennoch wichtig, das zu kennen.
Ich würde zum Anfangen C empfehlen (da echtes subset von C++, also C mit Objekten ).
Dann würde ich aber programmierer direkt in Java jagen...
Übrigens... Du wirst lachen wie viele Unternehmen in der Praxis der Einfachheit halber Microsoft Frameworks einsetzen und auf VBA-Makros angewiesen sind 
---
Gut gemacht 
|
Beitrag vom 01.05.2010 - 03:17 Beitrags-Nr: 25917 |
|
|
|
| Re: Climbings little C tut |
|
|
71 Beiträge - Forenkenner

|
Betriebsystem: Win7 X64 Ultimate RC Browser: Firefox
|
|
Jo, wir proggen inner Firma auch VB.net und haben auch schon 2 VBA dinger geschrieben, aber lieber nicht nochmal
|
Beitrag vom 01.05.2010 - 11:20 Beitrags-Nr: 25919 |
|
|
|
| Re: Climbings little C tut |
|
|
71 Beiträge - Forenkenner

|
Betriebsystem: Win7 X64 Ultimate RC Browser: Firefox
|
|
Einmal Switch und String Operationen in nem Getraenkeautomat eingebaut:
| Code: | |
| | #include <stdio.h>
| | #include <stdlib.h>
| |
| | int main()
| | {
| | int auswahl;
| | float kosten, einwurf, retourGeld;
| | //String in C
| | char getraenkName[11];
| |
| | printf("Getraenkeautomatnn");
| | printf("Waehlen sie Ihr Getraenk aus:n1) Wassert(0.50 Fr.)n2) Limonadet(1.00 Fr.)n3) Biertt(2.00 Fr.)nn");
| | auswahl = rightInput(1,3);
| |
| | switch(auswahl){
| | case 1:
| | kosten = 0.50;
| | //String bauen
| | strcpy(getraenkName, "ihr Wasser");
| | break;
| | case 2:
| | kosten = 1;
| | strcpy(getraenkName, "ihre Limonade");
| | break;
| | case 3:
| | kosten = 2;
| | strcpy(getraenkName, "ihr Bier");
| | break;
| | default:
| | printf("Interner Fehler, Programm wird beendet");
| | return -1;
| | break;
| | }
| |
| | do{
| | printf("Bitte werfen Sie %1.2f Euro ein: ", kosten);
| | scanf("%f",&einwurf);
| | fflush(stdin);
| | }while(einwurf < kosten);
| |
| | printf("Bitte entnehmen Sie %s.n", getraenkName);
| |
| | retourGeld = einwurf - kosten;
| |
| | if(retourGeld > 0){
| | printf("Ihr Retourgeld betraegt %.2f Fr.n", retourGeld);
| | }
| | //Damit das programm nicht verschwindet
| | system("PAUSE");
| | return 0;
| | }
| |
| | //Überprüfungsfunktion für die richtige EIngabe von Werten
| | int rightInput(int min, int max){
| | int returnRightInput, counter;
| | char komma = ' ';
| | do{
| | printf("Geben Sie");
| | for(counter=min;counter <= max;counter++){
| | if(counter == max){
| | printf(" oder %i ein:",counter);
| | }else{
| | printf("%c %i",komma,counter);
| | }
| | komma = ',';
| | }
| |
| | scanf("%i",&returnRightInput);
| | fflush(stdin);
| | }while(returnRightInput < min || returnRightInput > max);
| | }
| |
|
|
|
|
Ergibt am Ende einen Getränkeautomaten und dieses Ding Stuf ich mal als nicht quick and dirty ein.
Standardmethode, welche ich verwende um das Programm n-mal laufen zulassen ist:
| Code: | |
| | int nochmals = 1;
| | char janein;
| | do{
| | printf("Nochmal?J or Nn");
| | scanf("%c", &janein);
| | fflush(stdin);
| | while(janein != 'J' && janein != 'N'){
| | printf("Nochmal?J or Nn");
| | scanf("%c", &janein);
| | fflush(stdin);
| | }
| | }while(nochmals == 1);
| |
|
|
|
|
String mach ich immo mit Char Array, welche ich dann mit der Methode strcpy(Ziel, Wert) auffülle.
Switch ist auch relativ einfach
| Code: | | switch(variable){
| | case wert:
| | anweisungen;
| | break;
| | default:
| | anweisungen;
| | break;
| | case wert1:
| | case wert2:
| | Anweisungen;
| | break;
| | }
|
|
|
|
Der Post wurde 1 mal editiert, zuletzt von climbing93 am 01.05.2010 - 16:48.
|
Beitrag vom 01.05.2010 - 16:46 Beitrags-Nr: 25936 |
|
|
|
| Re: Climbings little C tut |
|
|
Freier Mitarbeiter 299 Beiträge - Forentipper

|
|
|
was lernst du denn climbing?!
|
Beitrag vom 05.05.2010 - 13:55 Beitrags-Nr: 26069 |
|
|
|
| Re: Climbings little C tut |
|
|
71 Beiträge - Forenkenner

|
Betriebsystem: Win7 X64 Ultimate RC Browser: Firefox
|
|
Applikationsentwickler;)
|
Beitrag vom 06.05.2010 - 19:43 Beitrags-Nr: 26148 |
|
|
|
| Re: Climbings little C tut |
|
|
Freier Mitarbeiter 299 Beiträge - Forentipper

|
|
|
Ist das ne Ausbildung?
Erzähl mal ein wenig mehr, das sagt ja bislang nur aus, dass du programmieren lernst
|
Beitrag vom 07.05.2010 - 03:29 Beitrags-Nr: 26153 |
|
|
|
| Re: Climbings little C tut |
|
|
71 Beiträge - Forenkenner

|
Betriebsystem: Win7 X64 Ultimate RC Browser: Firefox
|
|
@gomf
Deine Sig ist genial
Ich mach ne Ausbildung bei ner Bank als Informatiker-Applikationsentwickler mit BMS.
Gemacht haben wir mit Acces ein Memory und irgendein Adressenverteiler mit Abgleichung mit einer internen DB.
Dann haben wir ein 4Gewinnt programmiert mit Multiplayer(SQL-Server) und Access db, wenn kein lan. dazu musste man etwas programmieren, dass die sqlparameters in die Abfrage der Access-DB umwandelte. KI wurde keine programmiert, da zu aufwendig.
Immo sind wir an einem Mesenger dran, der auch übern SQL-Server läuft, mit StoredProcedures und allem drum und dran. Architektonisch so designt, dass wir relativ leicht ein Xaml-Gui dafür bauen können, wenn wir den Windows FOrms client fertig ham.
Und was machst du?
MFG
Climbing
|
Beitrag vom 08.05.2010 - 12:08 Beitrags-Nr: 26202 |
|
|
|
| Re: Climbings little C tut |
|
|
Freier Mitarbeiter 299 Beiträge - Forentipper

|
|
|
Ich habe Computer Science and Media studiert und mache momentan meinen Master of IT.
Gelernt habe ich von diversen Programmiersprachen, über Design und Analyse Patterns, Projectmanagement methoden, nen guten Schwund BWL/VWL, Datenbanken, Netzwerken, betriebsystemen und Informationssystemen bis (:D) hin zu 3D Modellierung ERP, CRM Systemen, IT Service Science und noch vieles mehr. Und momentan geht das noch weiter.
Das hab ich so ca. gelernt.
|
Beitrag vom 08.05.2010 - 13:20 Beitrags-Nr: 26210 |
|
|
|
| Re: Climbings little C tut |
|
|
71 Beiträge - Forenkenner

|
Betriebsystem: Win7 X64 Ultimate RC Browser: Firefox
|
|
Und praxis?
|
Beitrag vom 08.05.2010 - 13:54 Beitrags-Nr: 26217 |
|
|
|
| Re: Climbings little C tut |
|
|
Freier Mitarbeiter 299 Beiträge - Forentipper

|
|
|
Du fragst nach meiner Berufserfahrung? Du bist mir ja einer...
Netzwerkadministration, Anwendungsentwicklung, Parallelcomputing (High performance cluster bereich),
Webentwicklung, Information System Helpdesk und Support (SAP, SAP/BW) und Penetrationtests (Security)... ich glaube das ist alles IT relevante... die ganzen Projectmanagement und BWL Geschichten, sowie fachfremde sachen, schreib ich nun einfach mal nicht rein 
Du kannst aber davon ausgehen, dass man an einer Uni, das praktische was man studiert, auch beherrscht..
|
Beitrag vom 08.05.2010 - 15:22 Beitrags-Nr: 26219 |
|
|
|
| Re: Climbings little C tut |
|
|
71 Beiträge - Forenkenner

|
Betriebsystem: Win7 X64 Ultimate RC Browser: Firefox
|
|
Jo, war ja nicht rauszulesen, dass du bis jetzt 'nur' studierst hast.
|
Beitrag vom 08.05.2010 - 15:35 Beitrags-Nr: 26221 |
|
|
|
| Re: Climbings little C tut |
|
|
Freier Mitarbeiter 299 Beiträge - Forentipper

|
|
|
Nun.. ich habe nicht "nur" studiert....
|
Beitrag vom 09.05.2010 - 08:13 Beitrags-Nr: 26240 |
|