Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: C - вовремя горе генератор  (Прочитано 461 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн victor00000

  • Автор темы
  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
C - вовремя горе генератор
« : 04 Октябрь 2018, 22:11:12 »
// test_grief_generator.c
// victor00000 (c) 2018
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <locale.h>
#include <sys/ioctl.h>
// ~$ gcc test_grief_generator.c -o test_grief_generator -lpthread
// ~$ ./test_grief_generator
// exit - 'Enter'

int exit_0 = 0;
const char *cls_c = "\e[1;1H\e[2J";
int cvadr[] =
    { L'┏', L'━', L'┓', L'│', L'┛', L'━', L'┗', L'│', 0 };
int lt[] = { L'▁', L'╱', L'▔', L'╲', L'╳' };

typedef struct {
int w, h;
} wht;
int **xy, yy;

//=================cls
void cls()
{
fwrite(cls_c, 1, strlen(cls_c), stdout);
}

//=====================get w h
int getwhterm(int *wt, int *ht)
{
int e;
struct winsize wl;

e = ioctl(STDOUT_FILENO, TIOCGWINSZ, &wl);
*ht = wl.ws_row;
*wt = wl.ws_col;
return e;
}

//=================xy_rnd
void xy_rnd(wht wh)
{

int i, l = 0, d = 0;

for (i = 1; i < wh.h - 1; i++)
xy[i][wh.w - 2] = L' ';

l = yy;
yy += -1 + rand() % 3;
if (yy < 1)
yy = 1;
if (yy > wh.h - 2)
yy = wh.h - 2;

d = xy[l][wh.w - 3];
if (l == yy) {
if (d == lt[0])
d = lt[0];
if (d == lt[2])
d = lt[2];
if (d == lt[1])
d = lt[2];
if (d == lt[3])
d = lt[0];
} else {
if (l < yy) {
if (d == lt[1] || d == lt[2]) {
d = lt[3];
yy--;
} else {
d = lt[3];
}

}

if (l > yy) {
if (d == lt[3] || d == lt[0]) {
d = lt[1];
yy++;
} else {
d = lt[1];
}
}
}
xy[yy][wh.w - 2] = d;//lt [0];
//==============2
}

//===================xy_down
void xy_down(wht wh)
{

int x, y;

for (x = 1; x < wh.w - 2; x++) {
for (y = 1; y < wh.h - 1; y++) {
//xy [y] [x] = L'.';
xy[y][x] = xy[y][x + 1];

}
}
}

//===================xy_clear
void xy_clear(wht wh)
{
int x, y;

for (y = 0; y < wh.h; y++) {
for (x = 0; x < wh.w; x++) {
if (x == 0 || x == wh.w - 1)
xy[y][x] = cvadr[3];
else
xy[y][x] = L' ';

if (y == 0) {
xy[y][x] = cvadr[1];
if (x == 0)
xy[y][x] = cvadr[0];
if (x == wh.w - 1)
xy[y][x] = cvadr[2];
}
if (y == wh.h - 1) {
xy[y][x] = cvadr[1];
if (x == 0)
xy[y][x] = cvadr[6];
if (x == wh.w - 1)
xy[y][x] = cvadr[4];

//===================1
}
}
}
}

//====================xy_init
int **xy_init(wht wh)
{
int **x_y = 0;

x_y = malloc(sizeof(int) * wh.h);
int i;

for (i = 0; i < wh.h; i++) {
x_y[i] = malloc(sizeof(int) * wh.w);
}
return x_y;
}

//=================tp
void *tp(void *a)
{
wht *wh = (wht *) a;
int x, y;

while (1) {
xy_rnd(*wh);
xy_down(*wh);
cls();
for (y = 0; y < wh->h; y++) {
for (x = 0; x < wh->w; x++) {
printf("%lc", xy[y][x]);
}
// if (y != wh->h - 1)
puts("");
}
if (exit_0 == 1)
break;
usleep(1000 * 60);
}
return 0;
}

//==================m0
int main()
{
srand(time(0));
setlocale(LC_ALL, getenv("LANG"));
int wt, ht, e;

e = getwhterm(&wt, &ht);
if (e != 0) {
perror("Err");
return 1;
}

pthread_t t;
wht wh;

wh.w = wt;
wh.h = ht - 1;

yy = wh.h - 2;

xy = xy_init(wh);
xy_clear(wh);
xy[wh.h - 2][wh.w - 2] = lt[0];
xy_down(wh);
pthread_create(&t, 0, tp, &wh);
char cb;

while (fread(&cb, 1, 1, stdin) != 1) {
}
// pthread_cancel(t);
exit_0 = 1;
pthread_join(t, 0);
for (e = 0; e < wh.h; e++)
free(xy[e]);
free(xy);
return 0;
}

http://paste.ubuntu.com/p/CGGz3xbxBR/
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4327
  • Capture the truth
    • Просмотр профиля
Re: C - вовремя горе генератор
« Ответ #1 : 04 Октябрь 2018, 22:58:31 »
на bash лучше
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн victor00000

  • Автор темы
  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: C - вовремя горе генератор
« Ответ #2 : 04 Октябрь 2018, 23:24:26 »
Цитировать
на bash лучше
уже давно скучно, ещё не было C++ это круто.

PS: "вовремя" думали проблема?
папробуй выполнить в терминал только гораздо.
вот эту.
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
│                                   │
│             ╱╲╱╲          ╱╲      │
│            ╱    ╲╱▔╲     ╱  ╲╱▔▔╲╲│
│         ╱╲╱         ╲╱╲▁╱         │
│        ╱                          │
│       ╱                           │
│   ╱╲▁╱                            │
│  ╱                                │
│ ╱                                 │
│▔                                  │
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
движки правой на левой.
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4327
  • Capture the truth
    • Просмотр профиля
Re: C - вовремя горе генератор
« Ответ #3 : 05 Октябрь 2018, 00:02:59 »
как в linux проще запустить ваш код?
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн victor00000

  • Автор темы
  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: C - вовремя горе генератор
« Ответ #4 : 05 Октябрь 2018, 00:18:52 »
не понял, что где код?
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4327
  • Capture the truth
    • Просмотр профиля
Re: C - вовремя горе генератор
« Ответ #5 : 05 Октябрь 2018, 00:33:34 »
ваше первое сообщение. Просто запустить в linux?
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн victor00000

  • Автор темы
  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: C - вовремя горе генератор
« Ответ #6 : 05 Октябрь 2018, 01:12:35 »
конечно просто.

1. выше пост '[Выделить]' и копировать на вставить в nano сохранить где первый строк
// test_grief_generator.c
...
...
пример
nano test_grief_generator.c
как успешно вставить и сохранить, выход из nano.

2. команда для компилятор и запустить, где эту строки в посту.
// ~$ gcc test_grief_generator.c -o test_grief_generator -lpthread
// ~$ ./test_grief_generator
пример
компилятор
~$ gcc test_grief_generator.c -o test_grief_generator -lpthread
и чтобы пустую вывод это без ошибку.

запустить
~$ ./test_grief_generator
всё идёт.
а выход эту посту.
// exit - 'Enter'

Пользователь добавил сообщение 05 Октябрь 2018, 13:23:41:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
│                   ╭╮╭╾╮╭╾╾╾╾╮     │
│                 ╭╾╯╰╯ ╰╯    ╰╾╮ ╭╭│
│                ╭╯             ╰╾╯╯│
│            ╭╾╮╭╯                  │
│       ╭╾╾╾╾╯ ╰╯                   │
│    ╭╾╾╯                           │
│ ╭╾╾╯                              │
│╾╯                                 │
│                                   │
│                                   │
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


Пользователь добавил сообщение 05 Октябрь 2018, 13:29:49:
// test_grief_generator.c
// victor00000 (c) 2018
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <locale.h>
#include <sys/ioctl.h>
// ~$ gcc test_grief_generator.c -o test_grief_generator -lpthread
// ~$ ./test_grief_generator
// exit - 'Enter'

int exit_0 = 0;
const char *cls_c = "\e[1;1H\e[2J";

int cvadr[] = { L'┏', L'━', L'┓', L'│', L'┛',
L'━', L'┗', L'│', 0
};

//int lt[] = { L'━', L'┏', L'━',
//L'╲', L'╳' };

int *lt = (int *)L"╾╭╮╯╰";

// int lt[] = { L'▁', L'╱', L'▔',
// L'╲', L'╳' };

typedef struct {
int w, h;
} wht;
int **xy, yy;

//=================cls
void cls()
{
fwrite(cls_c, 1, strlen(cls_c), stdout);
}

//=====================get w h
int getwhterm(int *wt, int *ht)
{
int e;
struct winsize wl;

e = ioctl(STDOUT_FILENO, TIOCGWINSZ, &wl);
*ht = wl.ws_row;
*wt = wl.ws_col;
return e;
}

//=================xy_rnd
void xy_rnd(wht wh)
{

int i, l = 0, d = 0;

for (i = 1; i < wh.h - 1; i++)
xy[i][wh.w - 2] = L' ';

l = yy;
yy += -1 + rand() % 3;
if (yy < 1)
yy = 1;
if (yy > wh.h - 2)
yy = wh.h - 2;

d = xy[l][wh.w - 3];
//==============3
if (l == yy) {
// if (d == lt [ 0 ] )
d = lt[0];
/*
if (d == lt[1])
d = lt[ 0 ];
if (d == lt [ 1 ])
d = lt[2];
if (d == lt[3])
d = lt[0];
*/
} else {

if (l < yy) {
d = lt[2];
xy[l][wh.w - 2] = d;
d = lt[4];
}

if (l > yy) {
d = lt[3];
xy[l][wh.w - 2] = d;//lt [0];
d = lt[1];
}

}
xy[yy][wh.w - 2] = d;//lt [0];
//==============2
}

//===================xy_down
void xy_down(wht wh)
{

int x, y;

for (x = 1; x < wh.w - 2; x++) {
for (y = 1; y < wh.h - 1; y++) {
//xy [y] [x] = L'.';
xy[y][x] = xy[y][x + 1];

}
}
}

//===================xy_clear
void xy_clear(wht wh)
{
int x, y;

for (y = 0; y < wh.h; y++) {
for (x = 0; x < wh.w; x++) {
if (x == 0 || x == wh.w - 1)
xy[y][x] = cvadr[3];
else
xy[y][x] = L' ';

if (y == 0) {
xy[y][x] = cvadr[1];
if (x == 0)
xy[y][x] = cvadr[0];
if (x == wh.w - 1)
xy[y][x] = cvadr[2];
}
if (y == wh.h - 1) {
xy[y][x] = cvadr[1];
if (x == 0)
xy[y][x] = cvadr[6];
if (x == wh.w - 1)
xy[y][x] = cvadr[4];

//===================1
}
}
}
}

//====================xy_init
int **xy_init(wht wh)
{
int **x_y = 0;

x_y = malloc(sizeof(int) * wh.h);
int i;

for (i = 0; i < wh.h; i++) {
x_y[i] = malloc(sizeof(int) * wh.w);
}
return x_y;
}

//=================tp
void *tp(void *a)
{
wht *wh = (wht *) a;
int x, y;

while (1) {
xy_rnd(*wh);
xy_down(*wh);
cls();
for (y = 0; y < wh->h; y++) {
for (x = 0; x < wh->w; x++) {
printf("%lc", xy[y][x]);
}
// if (y != wh->h - 1)
puts("");
}
if (exit_0 == 1)
break;
usleep(1000 * 60);
}
return 0;
}

//==================m0
int main()
{
srand(time(0));
setlocale(LC_ALL, getenv("LANG"));
int wt, ht, e;

e = getwhterm(&wt, &ht);
if (e != 0) {
perror("Err");
return 1;
}

pthread_t t;
wht wh;

wh.w = wt;
wh.h = ht - 1;

yy = wh.h - 2;

xy = xy_init(wh);
xy_clear(wh);
xy[wh.h - 2][wh.w - 2] = lt[0];
xy_down(wh);
pthread_create(&t, 0, tp, &wh);
char cb;

while (fread(&cb, 1, 1, stdin) != 1) {
}
// pthread_cancel(t);
exit_0 = 1;
pthread_join(t, 0);
for (e = 0; e < wh.h; e++)
free(xy[e]);
free(xy);
return 0;
}
« Последнее редактирование: 05 Октябрь 2018, 13:29:49 от victor00000 »
Нельзя друзья, дулу - AnrDaemon видите?
~.o

 

Страница сгенерирована за 0.213 секунд. Запросов: 24.