М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
sanadakim
sanadakim
29.05.2023 01:25 •  Информатика

Неправильный порядок отображения спрайтов в 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()


Неправильный порядок отображения спрайтов в pygame import pygame, sys class MyBallClass(pygame.sprit

👇
Открыть все ответы
Ответ:
ang18
ang18
29.05.2023
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)каков будет резу
4,4(44 оценок)
Ответ:
ELINA98736
ELINA98736
29.05.2023
Var s:string;
n,k,i:integer;
begin
for n:=1 to 2 do
 begin
 writeln('Введите строку ',n,':');
 readln(s);
 k:=0;
 for i:=1 to length(s) do
  begin
  case s[i] of
   '[': k:=k+1;
   ']': k:=k-1;
   end;
  end;
 if k=0 
 then writeln('В строке ',s,' количество [ и ] одинаково')
 else writeln('В строке ',s,' количество [ и ] не одинаково');
 end;
end.

Пример:
Введите строку 1:
c:=a[imax,j]; a[imax,j]:=a[imin,j]; a[imin,j]:=c
В строке c:=a[imax,j]; a[imax,j]:=a[imin,j]; a[imin,j]:=c количество [ и ] одинаково
Введите строку 2:
Просто [ пример ]] со [[ скобками
В строке Просто [ пример ]] со [[ скобками количество [ и ] не одинаково
4,7(67 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ