Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2012, 22:12   #1
Leveret
 
Регистрация: 02.07.2012
Сообщений: 3
По умолчанию Модернизация "Змейки"

Дан код игры. Задание: сделать так, чтобы поле игры загружалось из файла. То есть звездочки, которые будет кушать змейка, загружались из текстового файла. И чтобы змейка состояла из знаков "-", "/", "\", "|" . то есть при повороте змейки были слэши, в зависимости от направления поворота. Ну, и с управлением тоже проблемы...надо подкорректировать. Помогите, пожалуйста.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <termios.h>
void set_icanon(int icanon) {
    struct termios oldt, newt;
    tcgetattr(STDIN_FILENO, &oldt);
    newt = oldt;
    newt.c_lflag &= ~(ICANON | ECHO);
    if (icanon)
        newt.c_lflag |= (ICANON | ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);
}
typedef struct { int x, y; } Coord;
Coord coord(int x, int y) {
    Coord c;
    c.x = x; c.y = y;
    return c;
}
typedef struct tagItem {
    Coord c;
    struct tagItem *next;
} Item;
Item *item(int x, int y, Item *next) {
    Item *n = (Item *)malloc(sizeof(Item));
    if (n) {
        n->c = coord(x, y);
        n->next = next;
    }
    return n;
}
void draw(const int *a, int w, int h) {
    int x, y, c;
    printf("\x1b[H\x1b[J"); /* VT100 clear */
    putchar('+');
    for (x = 0; x < w; ++x) putchar('-');
    printf("+\n");
    for (y = 0; y < h; ++y) {
        putchar('|');
        for (x = 0; x < w; ++x) {
            c = a[y*w + x];
            putchar(c == 0? ' ': (c == 1? 'O': '*'));
        }
        printf("|\n");
    }
    putchar('+');
    for (x = 0; x < w; ++x) putchar('-');
    printf("+\n");
}
int do_step(int *a, int w, int h, Coord v, Item **head, Item **tail) {
    int nx, ny, c;
    Item *it;
    nx = (*head)->c.x + v.x;
    ny = (*head)->c.y + v.y;
    if (nx < 0 || nx >= w || ny < 0 || ny >= h)
        return 0;
    c = a[ny*w + nx];
    if (c == 1)
        return 0;
    a[ny*w + nx] = 1;
    it = item(nx, ny, NULL);
    (*head)->next = it;
    *head = it;
    if (c == 0) {
        it = *tail;
        *tail = (*tail)->next;
        a[it->c.y * w + it->c.x] = 0;
        free(it);
    }
    return 1;
}
int wait_for_chr(int millis) {
    fd_set read_fds;
    struct timeval timeout;
    int retval;
    timeout.tv_sec = millis / 1000;
    timeout.tv_usec = (millis % 1000) * 1000;
    FD_ZERO(&read_fds);
    FD_SET(0, &read_fds);
    retval = select(1, &read_fds, NULL, NULL, &timeout);
    if (retval == 1)
        return fgetc(stdin);
    return -2;
}
#define w 5
#define h 4
int main() {
    Item *head, *tail;
    Coord v = {0,1};
    int a[w*h] = {
        0,1,1,1,0,
        0,0,0,1,0,
        0,2,0,0,0,
        0,0,2,0,0,
    };
    tail = item(1,0,item(2,0,item(3,0,item(3,1,NULL))));
    for (head = tail; head->next; head=head->next);
    set_icanon(0);
    do {
        int ch;
        draw(a, w, h);
        ch = wait_for_chr(1000);
        switch (ch) {
        case 'a': case 'A': v = coord(-1,0); break;
        case 'd': case 'D': v = coord(1,0); break;
        case 's': case 'S': v = coord(0,1); break;
        case 'w': case 'W': v = coord(0,-1); break;
        }
    } while (do_step(a, w, h, v, &head, &tail));
    printf("Game over\n");
    set_icanon(1);
    return 0;


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 02.07.2012 в 23:19.
Leveret вне форума Ответить с цитированием
Старый 04.07.2012, 12:46   #2
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Цитата:
Сообщение от Leveret Посмотреть сообщение
И чтобы змейка состояла из знаков "-", "/", "\", "|" . то есть при повороте змейки были слэши, в зависимости от направления поворота.
Не проще использовать GDI-графику?

Цитата:
Сообщение от Leveret Посмотреть сообщение
И чтобы змейка состояла из знаков "-", "/", "\", "|" . то есть при повороте змейки были слэши, в зависимости от направления поворота.
hon вне форума Ответить с цитированием
Старый 04.07.2012, 22:12   #3
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Если автор ещё смотрит на эту тему - помогу, просто не хочу стараться если это никому не нужно.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 10.07.2012, 17:36   #4
Leveret
 
Регистрация: 02.07.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от pufystyj Посмотреть сообщение
Если автор ещё смотрит на эту тему - помогу, просто не хочу стараться если это никому не нужно.
Помогите, пожалуйста. Очень надо..
Leveret вне форума Ответить с цитированием
Старый 11.07.2012, 15:14   #5
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Простите, я седня-завтра уежаю, помочь быстро не смогу, добавьте меня в скайпе x-enter1, напишите об этом... Если вам не срочно я пожже напишу
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 11.07.2012, 17:50   #6
Leveret
 
Регистрация: 02.07.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от pufystyj Посмотреть сообщение
Простите, я седня-завтра уежаю, помочь быстро не смогу, добавьте меня в скайпе x-enter1, напишите об этом... Если вам не срочно я пожже напишу
Хорошо. Мне уже не срочно)
Leveret вне форума Ответить с цитированием
Старый 12.07.2012, 02:57   #7
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Что-то шкрябаю, но ночью у меня код как у самого тупого быдлокодера в мире вот дебажу.... Вернусь через 2-3 дня... может буду дольше...

Добавил:
Не успел нашкрябал кое-какой код, но он не рабочий, что-то карта не выводиться нормально, глюк кароче.... Показывать не рабочий код не буду, да и зачем он вам. БЫло бы завтра время, вдень все бы исправил, а ночью - хоть убей, сколько раз ночью кодил - в день по 50-100 ошибок исправлял. Я как вернусь попробую написать этот код, но боюсь сейчас уже не успею, 2-3 дня прийдеться подождать или самим написать. Могу только сказать, что для поворотов я записывал куда змейка движеться и тогда ставить знаки поворота - не проблема. Работать приходиться только с первым и последним звеном, остальные заменяем начиная с конца на следующие, последнее (если нет звездочки) стираем, а первое двигаем в нужную сторону. И вам только надо ставить повороты на первое звено, дальше они сами двигаються... Ещё что сказать... Ну я работал со змейкой в массиве структур, а потом змейку накладывал на карту, стирая последнюю (повторюсь, если нет звездочки) и проверял первую, не конец ли карты и не на зведу ли мы наехали... Все я спать, простите что не успел сегодня. Я себя хочу убить из-за этого ;(
Код не выклал, потому что не знаю ещё где есть глюки, вообще после того как показывал своему другу свои коды - не рабочие коды не выкладываю.
Это ещё не конец и даже не начало конца, это возможно только конец начала.

Последний раз редактировалось pufystyj; 12.07.2012 в 03:43.
pufystyj вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчитать количество букв "й", "ы" и "я", содержащихся в заданной строке. VoltZZZ Помощь студентам 2 01.03.2012 23:39
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04