[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

Ответ в тред 48457. [Назад]
 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: pdf, music, text, code, vector, image, archive, flash, video
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.48457 Ответ
Файл: 1-soPiTsrgWsHZO2Z...
Png, 1468.07 KB, 2000×958
edit Find source with google Find source with iqdb
1-soPiTsrgWsHZO2ZHCQA_IA.png
Файл: vdfs.png
Png, 37.74 KB, 1207×826
edit Find source with google Find source with iqdb
vdfs.png
Файл: rustacean-error.png
Png, 37.41 KB, 573×300
edit Find source with google Find source with iqdb
rustacean-error.png

Зачем нужен? Во имя закапывания няшного и крестов. По крайней мере там, где можно избежать легаси и хочется писать как белый человек. Embedded пока с парой костылей вроде xargo, операционки, браузеры, всякий тяжелый код. Язык, где ты можешь отстрелить себе конечности, но ружья выдают только по карточкам. Компилятор в основном занимается твоим унижением.

Что тут есть? Рак вместо маскота. Самая новая концепция: управление временем жизни без сборки мусора. Всякие рюшечки вроде паттернматчинга, вывода типов, наконец-то нормальной реализации строк, гарантии безопасности, элементы функциональщины без потери производительности и всё остальное в таком духе.

Чего нет или ещё нет? Типов высшего порядка, константных генериков, alloca и ещё парочки похожих штук. Но работы ведутся. Ещё нет библиотек на все случаи жизни. За те несколько лет существования не успели. 1.5 вакансии уже есть, но их только 1.5. Использование нестабильной версии всё ещё актуально.

Оффициальный сайт: https://www.rust-lang.org/
Мануал: https://doc.rust-lang.org/book/second-edition/
Пакеты: https://crates.io/
>> No.48509 Ответ
>>48457
Нам нужен готовый красивый продукт, который хотим развивать. Так просто это не осметить. Нужно встречаться и разговаривать о затраченном времени. Мы вам перезвоним.
>> No.48607 Ответ
Файл: talking_captcha.png
Png, 1.04 KB, 300×20
edit Find source with google Find source with iqdb
talking_captcha.png
Файл: aXPlokT25t4.jpg
Jpg, 72.36 KB, 604×453
edit Find source with google Find source with iqdb
aXPlokT25t4.jpg

>>48509
Ну лаааадно.

Тогда я парочку статей вброшу.

https://habrahabr.ru/post/349248/
https://habrahabr.ru/post/351082/

Будем писать ядро? Ядро само себя не напишет. Спрашивайте свои ответы.
>> No.48608 Ответ
>> No.48622 Ответ
>>48457
https://rust-sdl2.github.io/rust-sdl2/sdl2/render/struct.Canvas.html
у меня возникла проблема. надо нарисовать прямоугольник, но под углом. я нашел два способа:
1) с помошью fill_rect, но я так и не нашел как это дело повернуть
2) с помошью copy_ex, но тут проблема в том, что закрашивается он немного странно, скорее всего проблема с Texture, но я так и не понял как оно работает, и где там что
>> No.48623 Ответ
Файл: helpneed.png.png
Png, 3.24 KB, 798×598 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
helpneed.png.png
>>48622
на сскрине сверху нарисованный fill_rect, а снизу copy
>> No.48624 Ответ
Файл: helpneed.png
Png, 11.23 KB, 572×499 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
helpneed.png
>>48623
отправить код нельзя, поэтому скрин
>> No.48633 Ответ
>>48607
Лэйн-моно, ты?
>> No.48641 Ответ
Файл: kisshoot.png
Png, 2.81 KB, 800×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
kisshoot.png
>>48633
Делай вид, что тебе показалось.

>>48622
Попробуй при помощи `filledpolygon` и `texturedpolygon` ещё.
Кстати про `copy_ex` есть такое: WARNING: This is a very slow operation, and should not be used frequently.

Для заливки цветом текстура точно не нужна.

Но вообще у меня оно просто чорный прямоугольник рисует. Что по идее и должно быть. Текстура же чорная внутри.

Алсо джля вставки кода можно использовать обратные кавычки. Набить код с такого скрина - дело пары минут, но всё равно копипастить гораздо удобнее.

extern crate sdl2;

use sdl2::pixels::PixelFormatEnum;
use sdl2::rect::Rect;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;

use std::f64::consts::PI;

fn main() {
let context = sdl2::init().unwrap();
let video = context.video().unwrap();
let window = video.window("demo video", 800, 600)
.position_centered()
.opengl()
.build()
.unwrap();

let mut canvas = window.into_canvas().build().unwrap();
let mut tc = canvas.texture_creator();
let mut tex = tc.createtexturestatic(tc.defaultpixelformat(), 1050, 150).unwrap();

canvas.clear();

// заливаем весь экран кроваво красным
canvas.setdrawcolor(Color::RGB(0xCC, 0, 0));
canvas.fill_rect(Rect::new(0, 0, 800, 600));

canvas.setdrawcolor(Color::RGB(255, 210, 0));
canvas.fill_rect(Rect::new(100, 10, 70, 80));

// по идее это должно делать что-то, но не делает
tex.setcolormod(255, 210, 0);

// обычный чорный прямоугольник
canvas.copy(&tex, None, Some(Rect::new(100, 100, 256, 256)));

// необычный чорный прямоугольник
canvas.copy_ex(
&tex,
None,
Some(Rect::new(400, 20, 256, 256)),
PI * 3.7,
None, false, false);

canvas.present();

let mut eventpump = context.eventpump().unwrap();

'lo: loop {
for event in eventpump.polliter() {
match event {
Event::Quit { .. } |
Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
break 'lo;
}
_ => (),
}
}
}
}
>> No.48649 Ответ
>> No.48650 Ответ
>>48649
В целом понравилось, но в ядре ОС не должно быть аллокаторов. Ящитаю.
>> No.48651 Ответ
>>48650
Спорно. Совсем без этого можно будет обойтись только если строить совсем минималистичное наноядро. По меньшей мере менеджер страниц то должен быть какой-то.
>> No.48668 Ответ
Про файловую систему https://habrahabr.ru/post/353024/
>> No.48672 Ответ
Файл: 74b038181153f3fb77688790cdc1be33.jpg
Jpg, 73.87 KB, 700×800 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
74b038181153f3fb77688790cdc1be33.jpg
>>48668
> Структуру Shared<T> из vfat/shared.rs можно использовать для безопасного мутабельного доступа типу T.
> Пригодится при реализации файловой системы. Особенно когда нам потребуется возможность совместного доступа к ФС из разных частей кода.
Через год на том же месте горячи фински парэн достаёт зайца из пакета и кладёт его на дорогу:
— Нннэ пригодилсаа.
Вам что, даже очередей сообщений не завезли?
>> No.48673 Ответ
>>48672
Если ты внимательно читал прошлые статьи и код, то заметишь, что синхронизации всё равно пока не работают. И не будут работать до того, как будет настроено MMU.
>> No.48674 Ответ
>>48673
Статью не читал, но мнение имею!

А вот на Макинтошах 1984 года не было MMU. А очереди заявок/запросов к файловой системе — были.
>> No.48675 Ответ
>>48674
Так то эта очередь формируется из ожидающих процессов. Т.е. мы блокируем процесс до тех пор, пока не придут данные.

На текущий момент достаточно блокировать всё и вся. Это банально проще же.
>> No.48693 Ответ
Файл: Sombra_mouth_wide_open_S3E2.png
Png, 56.89 KB, 300×169 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Sombra_mouth_wide_open_S3E2.png
>>48641
спасибо

теперь встал вопрос: есть список кучи элиментов, по обеим осям. и надо для элимента написать программу, взаимодействия его с соседними элиментами, причем программа должна иметь возможность как минимум перезаписать записать себя, сгенерировать структуру со своимиже данными, в один из соседних элиментов. состние в моем случае side определяет какой это элиемент. изначально проблема в том, что можно передать только один изменяемы элимент. загнать нужные элименты в кортеж не удалось, поэтому я тупо передал изменяемым весь список очень тупо. теперь хотелось бы чтобы за всю это отвечала одна венесенная переменная, но, по понятным причинам, изменяемые переменные создавать нельзя, а так мучает владение переменной. пока еще не дошел до этого, но еще вопрос: как быть если хочешь передать список/пару его элиментов дальше с возможностью его изменения, ведь теория https://kgv.gitbooks.io/rust_book_ru/content/src/ownership.html говорит что это тоже нельзя.

и для примера код:
pub fn itr(&self,a1:&mut [[Obj;N];N],i:usize,j:usize) {
if course {
if tp == 2 {
let as = if side == 0 {if j+1 >= N {Heresy::lock()} else
{ a[i][j+1]}} else if side ==1 {if par & i+1 <= N {a[i+1][j]} else if !par & i+1
<= N & j+1 <= N {a[i+1][j+1]} else {Heresy::lock()}} else if side == 2 {if
self.par {if i+1 <= N {a[i+1][j]} else {Heresy::lock()}} else {if i+1 <= N & j-1
> = 0 {a[i+1][j-1]} else {Heresy::lock()}}} else if side == 3 {if j-1 >=0 {a[i]
[j-1]} else {Heresy::lock()}} else if side == 4 {if par {if i-1>=0 {a[i-1][j]}
else {Heresy::lock()}} else {if i-1 >=0 & j-1 >=0 {a[i-1][j-1]} else
{Heresy::lock()}}} else if side == 5 {if par {if j+1 <=N & i-1 >=0 {a[i-1][j+1]}
else {Heresy::lock()}} else {if i-1 >= 0 {a[i-1][j]} else {Heresy::lock()}}}}
}
}
else{}
}

и если возникнут вопросты, описание Obj
pub struct Obj {
course:bool,
cond:i16,
side:i16,
tp:i16,
hp:i16,
liveiter:i16,
livebreed:i16,
liveancestor:i16,
table:Vec<[(i16,i16);4]>,
par:bool
}
>> No.48694 Ответ
Файл: dTUupHp.jpg
Jpg, 117.92 KB, 1280×720 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
dTUupHp.jpg
>>48693
Форматируй код нормально. Так ещё хуже, чем скриншотами. Или пользуйся всякими штуками, которые могут расшаривать код. Тот же https://play.rust-lang.org/ И используй Заглавные Буквы, блджад. Текст сливается и нечитаем и про спеллчекер не забудь. Я из этого нихуя не понел. Что ты хочешь получить то? Прогу, которая модифицирует саму себя?

Я не могу тебе помочь, если ты даже сформулировать проблему не можешь толком.

Подсказка: уделяй больше времени на то, чтоб правильно называть переменные/функции и всё прочее такое. i, j и подобное ТОЛЬКО для тех случаев, когда это в не слишком большом цикле. Комментируй код нормально. Как вариант: попробуй по шагам расписать, что твой код должен сделать, а потом используй этот текст как комментарии.

> Heresy::lock()
И глобальные функции/переменные не используй. СОВСЕМ не используй. До тех пор, пока весь ЯП не выучишь.

> пока еще не дошел до этого, но еще вопрос: как быть если хочешь передать список/пару его элиментов дальше с возможностью его изменения
Глава "Время жизни" и глава "Изменяемость (mutability)" тебе в помощь. Это если из первой версии книги. Оную лучше читать через http://rurust.github.io/rust_book_ru/ ибо там хоть нормально с форматированием.

Вообще рекомендую читать вторую версию книги. Она гораздо лучше структурирована. На английском https://doc.rust-lang.org/book/second-edition/, на русском только вот такое пока: https://github.com/ruRust/rust_book_2ed/tree/ru_version/second-edition/src

И вообще попробуй сначала доучить язык, а потом уже пытаться что-то на нём сколотить. В случае Rust в повседневном программинге используются большая часть фич.
>> No.48695 Ответ
Файл: King_sombra-s_eyes_at_the_top_of_the_shadow_S3E1.png
Png, 470.40 KB, 1280×720 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
King_sombra-s_eyes_at_the_top_of_the_shadow_S3E1.png
>>48694
> попробуй сначала доучить язык
у меня ограничено время на эту ересь
> Глава "Время жизни" и глава "Изменяемость (mutability)"
займемся
> Форматируй код нормально
это моя извечная проблема, ее решить мне так и не удается, но если не понятно, то есть двумерный список структур, у структуры есть функция, которая анализирует элименты вокруг него и если понадобится передвигает себя в один из этих элиментов. вообщем я думаю ты уже запутаешься на этом моменте, поэтому буду страдать.
> Heresy::lock()
это действительно ересь. надо было Obj::lock()
> Так ещё хуже, чем скриншотами
вот это обидно, я старался, хотя понимаю. лучше свич сделал, но все делалось на коленках и мозги были в отпустке
> И глобальные функции/переменные не используй. СОВСЕМ не используй
кстати на заметку. у меня такие есть и их даже 3...
>> No.48705 Ответ
Файл: Sombra_mouth_wide...
Png, 56.89 KB, 300×169
edit Find source with google Find source with iqdb
Sombra_mouth_wide_open_S3E2.png
Файл: helpneed.png
Png, 9.06 KB, 467×443
edit Find source with google Find source with iqdb
helpneed.png

я конечно туплю, но не знаю что делать. не подключается
>> No.48706 Ответ
Файл: 342-12.02.13-sombra_by_sajira-d5ko3xr.png
Png, 103.50 KB, 322×531 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
342-12.02.13-sombra_by_sajira-d5ko3xr.png
>>48705
проблема решена
>> No.48716 Ответ
Файл: sombra1.jpg
Jpg, 48.90 KB, 1280×720 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
sombra1.jpg
ну что, новая проблема. программа запускается, работает, но в определенный момент виснет. без ошибок и всякого такого. мне хотелось бы узнать. почему? как удалось выяснить?

если кто захочет по мучаться, то опишу константы. HEIGHT,WIDTH- высота и ширина соответственно, N= колличество ячеек по ширине и высоте, должно быть равно константе в inf, RANDEA- шанс появления еды, RENDMUда-да, знаю что неправильно, исправлять лень,- шанс мутаций. Vtp- схема отображения 0- пищевая, 1- защитная, 2- энергетическая. с остольным разбобраться можно, благо я даже названя нормальные давал а если не удастся то не судьба

extern crate sdl2;
extern crate rand;
//use sdl2::pixels::PixelFormatEnum;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;
use sdl2::gfx::primitives::DrawRenderer;
use sdl2::render::Canvas;
use sdl2::video::Window;
use std::f64;
//use std::mem;
//use std::ptr;
use rand::{Rng,thread_rng};
use std::time::Duration;
const Vtp:i16 = 2;
static HEIGHT:u32 = 600;
static WIDTH:u32 = 800;
const N:u32 = 40;
const RANDEA:u32 = 1;
pub fn main() {
let context = sdl2::init().unwrap();
let video = context.video().unwrap();
let mut rng = rand::thread_rng();
let window = video.window("rust-sdl2 demo: Video", WIDTH, HEIGHT)
.position_centered()
.opengl()
.build()
.unwrap();
let mut canvas = window.into_canvas().build().unwrap();
let tc = canvas.texture_creator();
let mut tex = tc.createtexturestatic(tc.defaultpixelformat(), 150,
150).unwrap();
canvas.clear();
canvas.setdrawcolor(Color::RGB(255, 210, 0));
let mut a:[[inf::Obj;N as usize];N as usize] =
unsafe{std::mem::uninitialized()};
for i in a.iter_mut(){
for j in i.iter_mut(){
unsafe{::std::ptr::write(j,inf::Obj::newNu())}
}
}
a[10][10]=inf::Obj::newPl(100,0,0);
let mut eventpump = context.eventpump().unwrap();
let mut run = true;
while run {
for event in eventpump.polliter() {
match event {
Event::Quit {..} | Event::KeyDown { keycode:
Some(Keycode::Escape), .. } => {
run = false;
},
_ => {}
}
}
for i in a.iter_mut(){
for j in i.iter_mut(){
if j.otp() == 2 {
*j= j.mkcour();
} else if (j.otp() == 0) &(rng.gen_range(0,100) < RANDEA) {*j =
inf::Obj::newEa();}
}
}
for i in 0..((N) as usize){
for j in 0..((N) as usize){
let a0 = a[i][j].copy();
if (a[i][j].otp() == 2) & (a0.getcour()){a[i][j]= a0.itr(&mut
a,i,j);}
}
}
fild(&canvas,&a);
canvas.present();
// std::thread::sleep(Duration::from_millis(2000));
}
// let mut eventpump = context.eventpump().unwrap();
// 'running: loop {
// for event in eventpump.polliter() {
// match event {
// Event::Quit {..}
// | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
// break 'running
// },
// _ => {}
// }
// }
// }
}
fn fild(canvas:&Canvas,arr:&[[inf::Obj;N as usize];N as usize]){
let r = (if HEIGHT/(2 + 3(N-1)/2) < (((WIDTH as f64)/(((2N+1) as
f64)(( f64::consts::PI/3.0).sin()))) as u32) {HEIGHT/(2+3(N-1)/2)} else
{((WIDTH as f64)/(((2N+1) as f64)(( f64::consts::PI/3.0).sin()))) as u32}) as
i16;
let a =(( f64::consts::PI/3.0).sin() * (r as f64)) as i16;
let mut x;
let mut c;
let mut y = r;
let mut f = true;
for i in (&arr).iter(){
if f {
x=a;
f=false;
} else {
x=2*a;
f=true;
};
for j in i.iter(){
c=j.col(Vtp);
hex(&canvas,x,y,r,Color::RGB(c.0,c.1,c.2));
x+=2*a;
}
y+=(3*r/2);
}
}
fn hex(c:&Canvas,x:i16,y:i16,r:i16,color:Color){
let a =(( f64::consts::PI/3.0).sin() * (r as f64)) as i16;
&c.filled_polygon(&[x,x+a,x+a,x,x-a,x-a],&[y-r,y-r/2,y+r/2,y+r,y+r/2,y-
r/2],color);
}
mod inf {
extern crate rand;
use rand::{Rng,thread_rng};
const N:usize = 40;
const RENDMU:i32 = 0;
pub struct Obj {
course:bool,
cond:i16,
side:i16,
tp:i16,
hp:i16,
def:i16,
off:i16,
liveiter:i16,
livebreed:i16,
liveancestor:i16,
table:Vec< [(i16,i16);4]>
}
impl Obj{
pub fn newPl(hp:i16,lb:i16,la:i16) -> Obj {
Obj
{course:false,cond:0,side:0,tp:2,hp:hp,def:0,off:0,liveiter:0,livebreed:lb,livea
ncestor:la,table:vec![Obj::vecstr()]}
}
pub fn newEa() -> Obj{
Obj
{course:false,cond:0,side:0,tp:1,hp:10,def:0,off:0,liveiter:0,livebreed:0,livean
cestor:0,table:vec![]}
}
pub fn newNu() -> Obj{
Obj
{course:false,cond:0,side:0,tp:0,hp:0,def:0,off:0,liveiter:0,livebreed:0,liveanc
estor:0,table:vec![]}
}
pub fn lock() -> Obj{
Obj
{course:false,cond:0,side:0,tp:3,hp:0,def:0,off:0,liveiter:0,livebreed:0,liveanc
estor:0,table:vec![]}
}
pub fn col(&self,t:i16) -> (u8,u8,u8){
match t {
0 => if self.tp == 0 {(255,255,255)} else if self.tp == 1
{(0,255,0)}else if self.tp==2 {((self.off255/2) as u8,0,((2-self.off)255/2) as
u8)} else {(0,0,0)},
1 => if self.tp == 0 {(255,255,255)} else if self.tp == 1
{(0,255,0)}else if self.tp==2 {if self.def == 0 {(244,205,138)} else if self.def
== 1 {(114,130,87)} else {(66,13,74)} } else {(0,0,0)},
2 => if self.tp == 0 {(255,255,255)} else if self.tp == 1
{(0,255,0)}else if self.tp==2 {((self.hp*255/100) as u8,0,0)} else {(0,0,0)}
_ => (0,0,0),
}
}
fn vecstr() -> [(i16,i16);4] {
[(0,0),(0,0),(1,0),(1,0)]
}
pub fn otp(&self) -> i16{
self.tp
}
fn war(&self,a:&mut Obj) -> bool{
((self.off == 0) & ((a.tp == 0)|(a.tp == 1))) | ((a.tp == 2) &
(self.off > a.def))
}
pub fn mkcour(&self ) -> Obj {
Obj
{course:true,cond:self.cond,side:self.side,tp:2,hp:self.hp,def:self.def,off:self
.off,liveiter:self.liveiter,livebreed:self.livebreed,liveancestor:self.liveances
tor,table:self.table.clone()}
}
pub fn getcour(&self) -> bool {
self.course
}
pub fn itr(&self,a1:&mut [[Obj;N];N],i:usize,j:usize) -> Obj{
println!("{},{} - {} -{}",i,j,self.hp,self.side);
for i0 in self.table.iter(){
print!("({},{}),({},{}),({},{}),({},{})",
i0[0].0,i0[0].1,i0[1].0,i0[1].1,i0[2].0,i0[2].1,i0[3].0,i0[3].1);
}
println!("");
if self.hp > 100{
self.division(a1,i,j)
} else {
let mut lock = Obj::lock();
let a =match (self.side) {
0 => if j+1 < N {&mut a1[i][j+1]} else {&mut lock},
1 => if i%2 == 0 {
if i+1 < N {&mut a1[i+1][j]} else {&mut lock}
}else{
if (i+1 < N) & (j+1 < N) {&mut a1[i+1][j+1]} else
{&mut lock}
},
2 => if i%2 == 0 {
if (i+1 < N) & (j >0) {&mut a1[i+1][j-1]} else {&mut
lock}
} else {
if i+1
},
3 => if j > 0 {&mut a1[i][j-1]} else {&mut lock},
4 => if i%2 == 0 {
if (i > 0) & (j >0) {&mut a1[i-1][j-1]} else {&mut
lock}
} else {
if i > 0 {&mut a1[i-1][j]} else {&mut lock}
},
5 => if i%2 == 0 {
if i > 0 {&mut a1[i-1][j]} else {&mut lock}
} else {
if (i > 0) & (j+1 < N) {&mut a1[i-1][j+1]} else
{&mut lock}
},
_ => &mut lock,
};
let (l,ncond) = self.table[self.cond as usize][a.tp as usize];
let nhp = self.hp - (1 + (self.table.len() as i16)/5) - (if l ==
3 {0} else {1})*(self.def +1)/(if (l==1) |(l==2){2} else {1});
if nhp <= 0{
Obj::newNu()
} else {
match l {
0 => {
if self.war(a){
*a = Obj
{course:false,cond:ncond,side:self.side,tp:2,hp:(nhp + a.hp -
3*self.off),def:self.def,off:self.off,liveiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()};
Obj::newNu()
} else {
Obj
{course:false,cond:ncond,side:self.side,tp:2,hp:nhp,def:self.def,off:self.off,li
veiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()}
}
},
1 => Obj {course:false,cond:ncond,side:(if self.side ==
5 {0} else {self.side +1}),tp:2,hp:nhp,def:self.def,off:self.off,liveiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()},
2 => Obj {course:false,cond:ncond,side:(if self.side ==
0 {5} else {self.side -1}),tp:2,hp:nhp,def:self.def,off:self.off,liveiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()},
3 => Obj
{course:false,cond:ncond,side:self.side,tp:2,hp:nhp,def:self.def,off:self.off,li
veiter:
(self.liveiter+1),livebreed:self.livebreed,liveancestor:self.liveancestor,table:
self.table.clone()},
_ => Obj::lock(),
}
}
}
}
fn division(&self,a1:&mut [[Obj;N];N],i:usize,j:usize) -> Obj{
let hp = (self.hp -20)/2;
let inc:[(i16,i16);6] = [(i as i16,(j as i16)+1),if i%2 == 0 {((i as
i16)+1,j as i16)} else{((i as i16)+1,(j as i16)+1)},if i%2 == 0 {((i as i16)+1,
(j as i16)-1)} else {((i as i16)+1,j as i16)},(i as i16,(j as i16)-1),if i%2 ==
0 {((i as i16)-1,(j as i16)-1)}else {((i as i16)-1,j as i16)},if i%2 == 0 {((i
as i16)-1,j as i16)} else {((i as i16)-1,(j as i16)+1)}];
let mut i1=self.side as usize;
if ((inc[i1].0 >=0) & (inc[i1].1>=0) & (inc[i1].0 <(N as i16)) &
(inc[i1].1 < (N as i16))){
if (a1[inc[i1].0 as usize][inc[i1].1 as usize].tp == 0) {
a1[inc[i1].0 as usize][inc[i1].1 as usize] = self.baby((i1
as i16),hp);
}
} else {
while {
if i1 == 0 {i1 = 5} else {i1-=1};
if (inc[i1].0 >=0) & (inc[i1].1>=0) & (inc[i1].0 < N as
i16 ) & (inc[i1].1 < N as i16){
a1[inc[i1].0 as usize][inc[i1].1 as usize].tp == 0
} else {i1 == (self.side as usize)}
} {}
if((i1==(self.side as usize)) & (inc[i1].0 >=0) & (inc[i1].1>=0)
& (inc[i1].0
if (a1[inc[i1].0 as usize][inc[i1].1 as usize].tp == 0) {
a1[inc[i1].0 as usize][inc[i1].1 as usize] =
self.baby((i1 as i16),hp);
}
}
}
self.baby((i1 as i16),hp)
}
fn baby (&self,side:i16,nhp:i16) -> Obj{
let mut rng = rand::thread_rng();
if (rng.gen_range(0,100) < RENDMU){
println!("mutation!");
let mut ndef= self.def;
let mut noff= self.off;
let mut ntable = self.table.clone();
if rng.gen() {
if rng.gen() {
ndef = match ndef {
0 => 1,
1 => if rng.gen() {0} else {2},
2 => 1,
_ => 0,
};
} else {
noff = match noff {
0 => 1,
1 => if rng.gen() {0} else {2},
2 => 1,
_ => 0,
};
}
} else {
let i = rng.gen_range(0,self.table.len());
let j = rng.gen_range(0,4);
if rng.gen() {
ntable[i][j] = (rng.gen_range(0,4),ntable[i][j].1);
} else {
let k = ntable[i][j].1;
let nk = rng.gen_range(0,ntable.len()+1);
ntable[i][j] = (ntable[i][j].0,nk as i16);
if nk == ntable.len(){ntable.push(Obj::vecstr());}
let mut f =true;
for i1 in 0..(ntable.len()){
for j1 in 0..4 {
if ((ntable[i1][j1].1 == k) & (i1 != (k as
usize))) {f=false;}
}
}
if f & (k != 0){
for i1 in 0..(ntable.len() -1){
if (i1 >= (k as usize)){
ntable[i1] = ntable[i1+1];}
for j1 in 0..4{
if ntable[i1][j1].1 > k {
ntable[i1][j1] = (ntable[i1]
[j1].0,ntable[i1][j1].1-1);
}
}
}
ntable.pop();
}
}
}
Obj {course:false,cond:0,side:rng.gen_range(0,
6),tp:self.tp,hp:nhp,def:ndef,off:noff,liveiter:0,livebreed:0,liveancestor:self.
liveiter,table:ntable.clone()}
} else {
Obj {course:self.course,cond:self.cond,side:rng.gen_range(0,
6),tp:self.tp,hp:nhp,def:self.def,off:self.off,liveiter:0,livebreed:self.livebre
ed+1,liveancestor:self.liveiter,table:self.table.clone()}
}
}
pub fn copy(&self) ->Obj {
Obj
{course:self.course,cond:self.cond,side:self.side,tp:self.tp,hp:self.hp,def:self
.def,off:self.off,liveiter:self.liveiter,livebreed:self.livebreed,liveancestor:s
elf.liveancestor,table:self.table.clone()}
}
}
}

>>48694
> Форматируй код нормально
> Так ещё хуже, чем скриншотами
братишка, я тебе покушать принес
>> No.48717 Ответ
>>48716
> братишка, я тебе покушать принес
А, ну ясно. Значит моя помощь не требуется.
>> No.48719 Ответ
Файл: sombra1.png
Png, 3599.93 KB, 1278×1406 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
sombra1.png
>>48717
да не, нужна
>> No.48724 Ответ
>> No.48740 Ответ
Файл: _mlp__king_sombra_by_gloriajoy-daim11i.png
Png, 898.20 KB, 1024×882 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
_mlp__king_sombra_by_gloriajoy-daim11i.png
я так и не получил ответ на свой вопрос, но все же задам новый. как с помошью Arc ну или без него передать переменную в поток событие, что-бы значение изменилось в основнм потоке. причем надо сделать 3 потокасобытия в начинающиеся в одном.

кстати, с того момента моя программа получила еще пару багов: иногода она не запускается, а еще изредка вообще из-за нее виснут иксы
>> No.48742 Ответ
Файл: Sombra_mouth_wide_open_S3E2.png
Png, 56.89 KB, 300×169 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Sombra_mouth_wide_open_S3E2.png
>>48740
https://kgv.gitbooks.io/rust_book_ru/content/src/concurrency.html
вроди как тут. надо не просто объявлять а с мьютексом
>> No.48756 Ответ
Файл: talking_captcha.png
Png, 0.97 KB, 300×20
edit Find source with google Find source with iqdb
talking_captcha.png
Файл: comp-1.gif
Gif, 128.33 KB, 320×240
edit Find source with google Find source with iqdb
comp-1.gif

Упс. Забыл про последнюю часть: https://habr.com/post/354784/


Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]