Konsolda Yılan Oyunu
-
Selam gençlik, bir iş için algoritmayı hazırlamışken konsolda basit bi yılan yazıyım dedim boş bi zamanda bir de tetris yazıcam, kaynak kodunu da veriyim belki işinize yarar.
Exe ve source burda http://www.sendspace.com/file/lthkqh
İlk başta biraz yavaş başlıyo 5 tane yem yutun hız 2 katına çıkıyo sonra 6 ya kadar artıyo, kodun içindeki MAX_SIZE ı arttırıp derlerseniz oyunu uzatabilirsiniz, şimdilik max 36 yılan boyutu.
-
Buyur abü
http://www.sendspace.com/file/yjcc8a
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #define MAX_SIZE 36 typedef struct tagCoord { int x; int y; } Coord; typedef struct tagSnake { int size; Coord xy[MAX_SIZE]; } Snake; int point, speed = 1; Coord bait; void gotoxy( int x, int y ) { COORD p = { x, y }; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), p); } void PrintFrame(void) { int i; unsigned char x[81] = {0}; x[0] = 201; x[79] = 187; memset(x+1, 205, 78); gotoxy(0,0); printf("\n%s\n", x); for (i=2; i<24; i++) { gotoxy(0,i); printf("%c", 186); gotoxy(79,i); printf("%c", 186); } gotoxy(0,24); x[0] = 200; x[79] = 188; printf("%s", x); speed = 1; point = 0; gotoxy(0,0); printf(" Boyut 1 "); gotoxy(35,0); printf(" Hiz 1 "); gotoxy(65,0); printf(" Puan 0 "); fflush(stdout); } void ClearDesk(Snake *s) { int i; gotoxy(bait.x, bait.y); printf(" "); for (i=0; i<(s->size); i++) { gotoxy(s->xy[i].x, s->xy[i].y); printf(" "); } while (_kbhit()) { getch(); } } void PutBait(void) { srand (time(NULL)); bait.x = rand() % 78 + 1; bait.y = rand() % 22 + 2; gotoxy(bait.x, bait.y); printf("%c", 42); } void MoveSnake(Snake *s, int way) { int i; gotoxy(s->xy[s->size -1].x, s->xy[s->size -1].y); printf(" "); for (i=s->size-1; i>0; i--) { s->xy[i].x = s->xy[i-1].x; s->xy[i].y = s->xy[i-1].y; } switch (way) { case 1: s->xy[0].y -= 1; break; case 2: s->xy[0].x -= 1; break; case 3: s->xy[0].x += 1; break; case 4: s->xy[0].y += 1; break; } if (s->xy[0].x == bait.x && s->xy[0].y == bait.y) { s->size++; point += 10*speed; if (s->size % 6 == 0) { speed++; } gotoxy(0,0); printf(" Boyut %d", s->size); gotoxy(35,0); printf(" Hiz %d", speed); gotoxy(65,0); printf(" Puan %d\a", point); PutBait(); } gotoxy(s->xy[0].x, s->xy[0].y); printf("%c", 254); } void NewSnake(Snake *s) { memset(s, 0, sizeof(Snake)); s->size = 1; s->xy[0].x = 39; s->xy[0].y = 12; PutBait(); } int IsCrash(Snake *s) { int i; if ((s->xy[0].x < 1 || s->xy[0].x > 78) || (s->xy[0].y < 2 || s->xy[0].y > 23)) { return 1; } for (i=1; i<(s->size); i++) { if (s->xy[0].x == s->xy[i].x && s->xy[0].y == s->xy[i].y) { return 1; } } return 0; } void PrintMessage(Coord *xy, char *message, int sleepTime) { char mask[256] = {0}; memset(mask, ' ', strlen(message)); gotoxy(xy->x, xy->y); printf("%s", message); Sleep(sleepTime); gotoxy(xy->x, xy->y); printf("%s", mask); } void UserControl(Snake *s) { int way = 0; while (1) { Sleep(500/speed); if (_kbhit()) { char c = getch(); if (c == -32) { c = getch(); } switch(c) { case 27: //ESC return; case 72: // Up if (way != 4) { way = 1; } break; case 75: // Left if (way != 3) { way = 2; } break; case 77: // Right if (way != 2) { way = 3; } break; case 80: // Down if (way != 1) { way = 4; } break; } } MoveSnake(s, way); if (IsCrash(s)) { s->xy[0].x -= 1; if (s->xy[0].x > 0) { PrintMessage(&(s->xy[0]), "(*)\a\a\a", 3000); } else { s->xy[0].x += 1; PrintMessage(&(s->xy[0]), "(*)\a\a\a", 3000); } return; } if (s->size == MAX_SIZE) { PrintMessage(&(s->xy[0]), "Tamam amk kazandin\a\a", 3000); return; } } } int main() { Snake s; while (1) { PrintFrame(); NewSnake(&s); UserControl(&s); ClearDesk(&s); } return 0; }
-
Eline sağlık ağa çok iyi olmuş :D
Mesaj 16 Temmuz 2012 (Pazartesi) Saat: 11:02'da SARI tarafından düzenlendi. -
Çok iyiymiş oldukça da az satır
-
Hocam konsol üzerinde basit grafiksel uygulamalar yazabilir miyiz?
-
Hocam bir daha yukleme sandınız var mı exe ve source dosyalarını link kırık.
-
Hocam kod duruyorsa tekrar yukleyebilir misin source kodda bazi hatalar aliyorum ?
-
başarılı