Leon-12
?>

Неправильный порядок отображения спрайтов в pygame import pygame, sys class MyBallClass(pygame.sprite.Sprite): def __init__(self, image_file, speed, location): pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('football.png') self.image=pygame.transform.scale(self.image, (30, 30)) self.rect=self.image.get_rect() self.rect.left, self.rect.top=location self.speed=speed def move(self): global score, score_surf, score_font self.rect=self.rect.move(self.speed) if self.rect.left<0 or self.rect.right>screen.get_width(): self.speed[0]=-self.speed[0] if self.rect.top<=0: self.speed[1]=-self.speed[1] score=score+1 score_surf=score_font.render(str(score), 1, (0, 0, 0)) class MyPaddleClass(pygame.sprite.Sprite): def __init__(self, location=[0, 0]): pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('footballer.png') self.image=pygame.transform.scale(self.image, (150, 220)) self.rect=self.image.get_rect() self.rect.left, self.rect.top=location pygame.init() screen=pygame.display.set_mode([460, 320]) pygame.display.set_caption('Проект "Футболист"') clock=pygame.time.Clock() myBall=MyBallClass('footballer.png', [10, 20], [20, 20]) ballGroup=pygame.sprite.Group(myBall) paddle=MyPaddleClass([270, 150]) lives=3;score=0 score_font=pygame.font.Font(None, 50) score_surf=score_font.render(str(score), 1, (0, 0, 0)) score_pos=[10, 10];done=False; running=True pygame.display.flip() while running: clock.tick(30) pole_surf=pygame.image.load('pole.png') pole_surf=pygame.transform.scale(pole_surf, (460, 320)) pole_rect=pole_surf.get_rect(center=(230, 160)) screen.blit(pole_surf, pole_rect) pygame.display.flip() for event in pygame.event.get(): if event.type==pygame.QUIT: running=False elif event.type==pygame.MOUSEMOTION: paddle.rect.centerx=event.pos[0] if pygame.sprite.spritecollide(paddle, ballGroup, False): myBall.speed[1]=-myBall.speed[1] pygame.display.flip() myBall.move() if not done: screen.blit(myBall.image, myBall.rect) screen.blit(paddle.image, paddle.rect) screen.blit(score_surf, score_pos) pygame.display.flip() for i in range (lives): width=screen.get_width() screen.blit(myBall.image, [width - 40*i, 20]) pygame.display.flip() pygame.display.flip() if myBall.rect.top>=screen.get_rect(bottom: lives=lives-1 if lives==0: final_text1="Конец игры" final_text2="Количество очков:" + str(score) ft1_font=pygame.font.Font(None, 70) ft1_surf=ft1_font.render(final_text1, 1, (255, 0, 0)) ft2_font=pygame.font.Font(None, 50) ft2_surf=ft2_font.render(final_text2, 1, (255, 0, 0)) screen.blit(ft1_surf, [screen.get.width()/2 - \ ft1_surf.get_width()/2, 100]) screen.blit(ft2_surf, [screen.get.width()/2 - \ ft2_surf.get_width()/2, 200]) pygame.display.flip() done=True else: pygame.time.delay(5000) myBall.rect.topleft=[50, 50] if event.type==pygame.QUIT: running=False pygame.quit()

Информатика

Ответы

Sergei Vitalevna
1. 16-битная арифметика со знаком предполагает, что самый левый бит используется для хранения знака. Отрицательные числа хранятся в дополнительном коде. При этом диапазон представления данных составляет -32768..32767.
32760+9 можно записать как 32767+2. Это позволит избежать перевода 32760 в двоичную систему счисления, а 32767 - это 15 двоичных единиц. В знаковом разряде, конечно же, ноль.
После сложения в знаковом разряде появляется единица, что означает наличие отрицательного числа в дополнительном коде. Знаковый разряд мы не трогаем, а остальные инвертируем и арифметически прибавляем к полученному числу единицу. Тем самым переходим к прямому коду, который переводим в десятичную систему представления. И результат, конечно, же, будет со знаком минус, т.е. -32767. Вот к чему приводит переполнение разрядной сетки в целочисленной арифметике. Кстати, аппаратно оно не обнаруживается, поскольку криминала нет - просто +1 переходит в самый старший (левый) разряд. "Железо" ведь не знает, сколько разрядов мы отвели под представление чисел и как биты нужно рассматривать! Соответствующая картинка находится в первом вложении.

2. В восьмибитной арифметике все происходит аналогично. 127 представляется знаковым нулем и семью единицами в остальных разрядах, т.е. 01111111₂. Тройка - это 0..011₂
Складываем и получаем 10000010₂. Опять знаковый разряд единичный, инвертируем остальные: 11111101. А теперь прибавляем единицу и получаем 11111110₂. Числу 1111110₂ (знаковый разряд мы не учитываем) соответствует 126₁₀, а с учетом знака окончательно получаем -126.

3. Тут немного больше нужно повозиться. Арифметика снова 16-битная, диапазон представления чисел -32768..32767.
Выпишем факториалы в пределах этого диапазона и одно значение вне его. 1!=1, 2!=2, 3!=6, 4!=24, 5"=120, 6!=720, 7!=5040, 8!=40320.
Делаем вывод, что максимальное значение факториала можно вычислить для n=7 и n!=5040. Тогда n+1=8 и при его вычислении у нас возникнет арифметическое переполнение. Переведем число 5040 в двоичную систему и умножим его на 8, поскольку 8! = 7! × 8. Поскольку 8 = 2³, то умножение на 8 в двоичной системе равносильно сдвигу числа влево на три разряда. Подробности приведены на рисунке во втором вложении. Мы получим "странный" результат: 8! = -25216.

1)выполните сложение десятичных чисел 32760 + 9 в 16-битной арифметике со знаком. 2)каков будет резу
1)выполните сложение десятичных чисел 32760 + 9 в 16-битной арифметике со знаком. 2)каков будет резу

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Неправильный порядок отображения спрайтов в pygame import pygame, sys class MyBallClass(pygame.sprite.Sprite): def __init__(self, image_file, speed, location): pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('football.png') self.image=pygame.transform.scale(self.image, (30, 30)) self.rect=self.image.get_rect() self.rect.left, self.rect.top=location self.speed=speed def move(self): global score, score_surf, score_font self.rect=self.rect.move(self.speed) if self.rect.left<0 or self.rect.right>screen.get_width(): self.speed[0]=-self.speed[0] if self.rect.top<=0: self.speed[1]=-self.speed[1] score=score+1 score_surf=score_font.render(str(score), 1, (0, 0, 0)) class MyPaddleClass(pygame.sprite.Sprite): def __init__(self, location=[0, 0]): pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('footballer.png') self.image=pygame.transform.scale(self.image, (150, 220)) self.rect=self.image.get_rect() self.rect.left, self.rect.top=location pygame.init() screen=pygame.display.set_mode([460, 320]) pygame.display.set_caption('Проект "Футболист"') clock=pygame.time.Clock() myBall=MyBallClass('footballer.png', [10, 20], [20, 20]) ballGroup=pygame.sprite.Group(myBall) paddle=MyPaddleClass([270, 150]) lives=3;score=0 score_font=pygame.font.Font(None, 50) score_surf=score_font.render(str(score), 1, (0, 0, 0)) score_pos=[10, 10];done=False; running=True pygame.display.flip() while running: clock.tick(30) pole_surf=pygame.image.load('pole.png') pole_surf=pygame.transform.scale(pole_surf, (460, 320)) pole_rect=pole_surf.get_rect(center=(230, 160)) screen.blit(pole_surf, pole_rect) pygame.display.flip() for event in pygame.event.get(): if event.type==pygame.QUIT: running=False elif event.type==pygame.MOUSEMOTION: paddle.rect.centerx=event.pos[0] if pygame.sprite.spritecollide(paddle, ballGroup, False): myBall.speed[1]=-myBall.speed[1] pygame.display.flip() myBall.move() if not done: screen.blit(myBall.image, myBall.rect) screen.blit(paddle.image, paddle.rect) screen.blit(score_surf, score_pos) pygame.display.flip() for i in range (lives): width=screen.get_width() screen.blit(myBall.image, [width - 40*i, 20]) pygame.display.flip() pygame.display.flip() if myBall.rect.top>=screen.get_rect(bottom: lives=lives-1 if lives==0: final_text1="Конец игры" final_text2="Количество очков:" + str(score) ft1_font=pygame.font.Font(None, 70) ft1_surf=ft1_font.render(final_text1, 1, (255, 0, 0)) ft2_font=pygame.font.Font(None, 50) ft2_surf=ft2_font.render(final_text2, 1, (255, 0, 0)) screen.blit(ft1_surf, [screen.get.width()/2 - \ ft1_surf.get_width()/2, 100]) screen.blit(ft2_surf, [screen.get.width()/2 - \ ft2_surf.get_width()/2, 200]) pygame.display.flip() done=True else: pygame.time.delay(5000) myBall.rect.topleft=[50, 50] if event.type==pygame.QUIT: running=False pygame.quit()
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

natkuv7
kononenko-elena4
druzjkinaas22
gallows-warlike-0z
Nikishina
samira57
nunabat457
Pavel1545
ashantik
korolev-comitet8825
Olesya-elena1525
andr77716
IrinaSolodukhina1495
xalina85
Kuzminastia20038