{"id":6221,"date":"2020-06-29T07:00:23","date_gmt":"2020-06-29T05:00:23","guid":{"rendered":"https:\/\/pythonprogramming.altervista.org\/?p=6221"},"modified":"2020-06-29T07:00:23","modified_gmt":"2020-06-29T05:00:23","slug":"arkanoid-1-2","status":"publish","type":"post","link":"https:\/\/pythonprogramming.altervista.org\/arkanoid-1-2\/","title":{"rendered":"Arkanoid 1.2"},"content":{"rendered":"<p>I added some code to speed up the ball when the player bar is moving at the moment of the collision, with the function speed_up():<\/p>\n<pre class=\"lang:default decode:true \">def speed_up():\r\n    global vel_bal\r\n    x, y = pygame.mouse.get_pos()\r\n    if startx == x:\r\n        vel_bal = 1\r\n        print(\"Normal speed\")\r\n    else:\r\n        vel_bal = 2\r\n        print(\"Speed up\")<\/pre>\n<p>We also added the bricks, but, at the moment they are just images and no collision is detected.<\/p>\n<p>They are built with this sprite class:<\/p>\n<pre class=\"lang:default decode:true \">class Sprite:\r\n    \"Draw Player 2\"\r\n\r\n    def __init__(self, x, y):\r\n        self.x = x\r\n        self.y = y\r\n        self.update()\r\n\r\n    def update(self):\r\n        pygame.draw.rect(screen, GREEN, (self.x, self.y, 50, 10))<\/pre>\n<p>And then all the bricks are create with this function:<\/p>\n<pre class=\"lang:default decode:true \">def create_bricks():\r\n    blist = \"\"\"\r\n10111111\r\n11111011\r\n    \"\"\"\r\n    bricks = []\r\n    h = 20\r\n    w = 0\r\n    for brick in blist[1:-1]:\r\n        if brick == \"1\":\r\n            bricks.append(Sprite(20 + w * 60, h))\r\n            if w &gt; 7:\r\n                w = 0\r\n                h += 20\r\n        w += 1\r\n    return bricks\r\n\r\nbricks = create_bricks()<\/pre>\n<p>So the bricks list contains all the sprites, that are displayed in the <strong>while loop<\/strong> with the update function of every sprite:<\/p>\n<pre class=\"lang:default decode:true \">    for brick in bricks:\r\n        brick.update()<\/pre>\n<h2>The whole code<\/h2>\n<pre class=\"lang:default decode:true \"># pong!\r\nimport pygame\r\nfrom random import choice, randrange\r\n\r\nBLACK = (0, 0, 0)\r\nRED = (255, 0, 0)\r\nGREEN = (0, 255, 0)\r\n\r\n# Coordinates p1, p2 and ball\r\nx1 = 490\r\ny1 = 490\r\nx2 = 0\r\ny2 = 250\r\nxb = 500\r\nyb = 300\r\n\r\ndbo = 'left'\r\ndbv = 'down'\r\n\r\nscorep1 = 0\r\nscorep2 = 0\r\n\r\nvel_bal = 2\r\n\r\nclock = pygame.time.Clock()\r\nscreen = pygame.display.set_mode((500, 500))\r\npygame.display.set_caption(\"Game\")\r\n\r\npygame.init()\r\n\r\n\r\n\r\n\r\ndef sprite1(x, y):\r\n    \"Draw Player 1\"\r\n    pygame.draw.rect(screen, RED, (x, y, 50, 10))\r\n\r\n\r\nclass Sprite:\r\n    \"Draw Player 2\"\r\n\r\n    def __init__(self, x, y):\r\n        self.x = x\r\n        self.y = y\r\n        self.update()\r\n\r\n    def update(self):\r\n        pygame.draw.rect(screen, GREEN, (self.x, self.y, 50, 10))\r\n\r\n\r\ndef move_ball(x, y):\r\n    \"The ball moves\"\r\n    global xb, yb, dbo, dbv\r\n    if dbo == \"left\":\r\n        xb -= vel_bal\r\n        if xb &lt; 10:\r\n            dbo = \"right\"\r\n    if dbv == 'down':\r\n        yb += vel_bal\r\n    if dbv == 'up':\r\n        yb -= vel_bal\r\n        if yb &lt; 10:\r\n            dbv = 'down'\r\n    if dbo == \"right\":\r\n        xb += vel_bal\r\n        if xb &gt; 480:\r\n            dbo = \"left\"\r\n    pygame.draw.ellipse(screen, GREEN, (xb, yb, 10, 10))\r\n\r\n\r\ndef collision():\r\n    global startx\r\n    global x1, y1\r\n    global x2, y2\r\n    global xb, yb\r\n    global x, y\r\n    global dbo, dbv, vel_bal\r\n    global scorep1, scorep2\r\n    if dbo == \"left\":\r\n        if yb &gt; 480:\r\n            if (xb &gt;= x and xb &lt; x + 50):\r\n                print(\"Collision detected\")\r\n                dbv = \"up\"\r\n                print(dbv)\r\n                print(yb)\r\n                speed_up()\r\n            else:\r\n                pygame.draw.ellipse(screen, BLACK, (xb, yb, 20, 20))\r\n                pygame.display.update()\r\n                xb, yb = 500, 300\r\n\r\n\r\ndef move1():\r\n    global y2\r\n    if y2 &lt;= 450:\r\n        if keys[pygame.K_z]:\r\n            y2 += 20\r\n    if y2 &gt; 0:\r\n        if keys[pygame.K_a]:\r\n            y2 -= 20\r\n\r\n\r\ndef move2():\r\n    global y1\r\n    if y1 &lt;= 450:\r\n        if keys[pygame.K_m]:\r\n            y1 += 20\r\n    if y1 &gt; 0:\r\n        if keys[pygame.K_k]:\r\n            y1 -= 20\r\n\r\ndef exit(event):\r\n    global loop\r\n\r\n    if event.type == pygame.QUIT:\r\n        loop = 0\r\n    if event.type == pygame.KEYUP:\r\n        if event.key == pygame.K_ESCAPE:\r\n            loop = 0\r\n    return loop\r\n\r\n\r\ndef speed_up():\r\n    global vel_bal\r\n    x, y = pygame.mouse.get_pos()\r\n    if startx == x:\r\n        vel_bal = 1\r\n        print(\"Normal speed\")\r\n    else:\r\n        vel_bal = 2\r\n        print(\"Speed up\")\r\n\r\n\r\npygame.mouse.set_visible(False)\r\nloop = 1\r\n\r\n# This is to increase ball speed\r\nstartx = 0\r\n\r\ndef create_bricks():\r\n    blist = \"\"\"\r\n10111111\r\n11111011\r\n    \"\"\"\r\n    bricks = []\r\n    h = 20\r\n    w = 0\r\n    for brick in blist[1:-1]:\r\n        if brick == \"1\":\r\n            bricks.append(Sprite(20 + w * 60, h))\r\n            if w &gt; 7:\r\n                w = 0\r\n                h += 20\r\n        w += 1\r\n    return bricks\r\n\r\nbricks = create_bricks()\r\n\r\nwhile loop:\r\n    keys = pygame.key.get_pressed()\r\n    for event in pygame.event.get():\r\n        loop = exit(event)\r\n    move1()\r\n    move2()\r\n    move_ball(xb, yb)\r\n    x, y = pygame.mouse.get_pos()\r\n    sprite1(x, y1)\r\n    collision()\r\n    startx = x\r\n    for brick in bricks:\r\n        brick.update()\r\n    pygame.display.update()\r\n    screen.fill((0, 0, 0))\r\n    clock.tick(120)\r\n\r\n\r\n\r\npygame.quit()<\/pre>\n<h2>How it looks like<\/h2>\n<div style=\"width: 747px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-6221-1\" width=\"747\" height=\"420\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/06\/arka2.mp4?_=1\" \/><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/06\/arka2.mp4\">https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/06\/arka2.mp4<\/a><\/video><\/div>\n","protected":false},"excerpt":{"rendered":"Arkanoid 1.2\n<a class=\"moretag\" href=\"https:\/\/pythonprogramming.altervista.org\/arkanoid-1-2\/\"> [...]<\/a>","protected":false},"author":1,"featured_media":6223,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[191],"tags":[812,137,194,4],"class_list":["post-6221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pygame","tag-arkanoid-1-2","tag-game","tag-pygame","tag-python"],"avopt_banners_inside_post":true,"avopt_banners_on_page":true,"av_copy_from":"","av_sharing_message":"","av_sharing_allowed":true,"av_sharing_on":{"fb":[],"tw":[]},"av_allow_affiliate_banner":false,"av_allow_affiliate_multi_banner":false,"av_show_affiliation_buy_button":false,"av_post_rating":true,"av_have_post_rating_value":false,"av_is_artificial_intelligence_content":false,"_links":{"self":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/6221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/comments?post=6221"}],"version-history":[{"count":1,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/6221\/revisions"}],"predecessor-version":[{"id":6224,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/6221\/revisions\/6224"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media\/6223"}],"wp:attachment":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media?parent=6221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/categories?post=6221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/tags?post=6221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}