Typing Speed Game Using Python - Themidom

 Well, hello python programmers. This is A.S. Themidom. Today in this post you will know about making a snake game using python.




First, we need to import some python modules (install pygame):


 import pygame  
 from pygame.locals import *  
 import sys  
 import time  
 import random  
And, now we will define a class - Game, and then we will put some default value, and other logic:


 class Game:  
   def __init__(self):  
     self.w=750  
     self.h=500  
     self.reset=True  
     self.active = False  
     self.input_text=''  
     self.word = ''  
     self.time_start = 0  
     self.total_time = 0  
     self.accuracy = '0%'  
     self.results = 'Time:0 Accuracy:0 % Wpm:0 '  
     self.wpm = 0  
     self.end = False  
     self.HEAD_C = (255,213,102)  
     self.TEXT_C = (240,240,240)  
     self.RESULT_C = (255,70,70)  
     pygame.init()  
     self.open_img = pygame.image.load('banner.png')  
     self.open_img = pygame.transform.scale(self.open_img, (self.w,self.h))  
     self.bg = pygame.image.load('background.jpg')  
     self.bg = pygame.transform.scale(self.bg, (500,750))  
     self.screen = pygame.display.set_mode((self.w,self.h))  
     pygame.display.set_caption('Type Speed test')  
   def draw_text(self, screen, msg, y ,fsize, color):  
     font = pygame.font.Font(None, fsize)  
     text = font.render(msg, 1,color)  
     text_rect = text.get_rect(center=(self.w/2, y))  
     screen.blit(text, text_rect)  
     pygame.display.update()    
   def get_sentence(self):  
     f = open('sentences.txt').read()  
     sentences = f.split('\n')  
     sentence = random.choice(sentences)  
     return sentence  
   def show_results(self, screen):  
     if(not self.end):  
       #Calculate time  
       self.total_time = time.time() - self.time_start  
       #Calculate accuracy  
       count = 0  
       for i,c in enumerate(self.word):  
         try:  
           if self.input_text[i] == c:  
             count += 1  
         except:  
           pass  
       self.accuracy = count/len(self.word)*100  
       #Calculate words per minute  
       self.wpm = len(self.input_text)*60/(5*self.total_time)  
       self.end = True  
       print(self.total_time)  
       self.results = 'Time:'+str(round(self.total_time)) +" secs  Accuracy:"+ str(round(self.accuracy)) + "%" + '  Wpm: ' + str(round(self.wpm))  
       # draw icon image  
       self.time_img = pygame.image.load('icon.png')  
       self.time_img = pygame.transform.scale(self.time_img, (150,150))  
       #screen.blit(self.time_img, (80,320))  
       screen.blit(self.time_img, (self.w/2-75,self.h-140))  
       self.draw_text(screen,"Reset", self.h - 70, 26, (100,100,100))  
       print(self.results)  
       pygame.display.update()  
   def run(self):  
     self.reset_game()  
     self.running=True  
     while(self.running):  
       clock = pygame.time.Clock()  
       self.screen.fill((0,0,0), (50,250,650,50))  
       pygame.draw.rect(self.screen,self.HEAD_C, (50,250,650,50), 2)  
       # update the text of user input  
       self.draw_text(self.screen, self.input_text, 274, 26,(250,250,250))  
       pygame.display.update()  
       for event in pygame.event.get():  
         if event.type == QUIT:  
           self.running = False  
           sys.exit()  
         elif event.type == pygame.MOUSEBUTTONUP:  
           x,y = pygame.mouse.get_pos()  
           # position of input box  
           if(x>=50 and x<=650 and y>=250 and y<=300):  
             self.active = True  
             self.input_text = ''  
             self.time_start = time.time()   
            # position of reset box  
           if(x>=310 and x<=510 and y>=390 and self.end):  
             self.reset_game()  
             x,y = pygame.mouse.get_pos()  
         elif event.type == pygame.KEYDOWN:  
           if self.active and not self.end:  
             if event.key == pygame.K_RETURN:  
               print(self.input_text)  
               self.show_results(self.screen)  
               print(self.results)  
               self.draw_text(self.screen, self.results,350, 28, self.RESULT_C)   
               self.end = True  
             elif event.key == pygame.K_BACKSPACE:  
               self.input_text = self.input_text[:-1]  
             else:  
               try:  
                 self.input_text += event.unicode  
               except:  
                 pass  
       pygame.display.update()  
     clock.tick(60)  
   def reset_game(self):  
     self.screen.blit(self.open_img, (0,0))  
     pygame.display.update()  
     time.sleep(1)  
     self.reset=False  
     self.end = False  
     self.input_text=''  
     self.word = ''  
     self.time_start = 0  
     self.total_time = 0  
     self.wpm = 0  
     # Get random sentence   
     self.word = self.get_sentence()  
     if (not self.word): self.reset_game()  
     #drawing heading  
     self.screen.fill((0,0,0))  
     self.screen.blit(self.bg,(0,0))  
     msg = "Typing Speed Test"  
     self.draw_text(self.screen, msg,80, 80,self.HEAD_C)   
     # draw the rectangle for input box  
     pygame.draw.rect(self.screen,(255,192,25), (50,250,650,50), 2)  
     # draw the sentence string  
     self.draw_text(self.screen, self.word,200, 28,self.TEXT_C)  
     pygame.display.update()  
And then, we will call the class.
Game().run()
And, here's the full code.

 import pygame  
 from pygame.locals import *  
 import sys  
 import time  
 import random  
 # 750 x 500    
 class Game:  
   def __init__(self):  
     self.w=750  
     self.h=500  
     self.reset=True  
     self.active = False  
     self.input_text=''  
     self.word = ''  
     self.time_start = 0  
     self.total_time = 0  
     self.accuracy = '0%'  
     self.results = 'Time:0 Accuracy:0 % Wpm:0 '  
     self.wpm = 0  
     self.end = False  
     self.HEAD_C = (255,213,102)  
     self.TEXT_C = (240,240,240)  
     self.RESULT_C = (255,70,70)  
     pygame.init()  
     self.open_img = pygame.image.load('banner.png')  
     self.open_img = pygame.transform.scale(self.open_img, (self.w,self.h))  
     self.bg = pygame.image.load('background.jpg')  
     self.bg = pygame.transform.scale(self.bg, (500,750))  
     self.screen = pygame.display.set_mode((self.w,self.h))  
     pygame.display.set_caption('Type Speed test')  
   def draw_text(self, screen, msg, y ,fsize, color):  
     font = pygame.font.Font(None, fsize)  
     text = font.render(msg, 1,color)  
     text_rect = text.get_rect(center=(self.w/2, y))  
     screen.blit(text, text_rect)  
     pygame.display.update()    
   def get_sentence(self):  
     f = open('sentences.txt').read()  
     sentences = f.split('\n')  
     sentence = random.choice(sentences)  
     return sentence  
   def show_results(self, screen):  
     if(not self.end):  
       #Calculate time  
       self.total_time = time.time() - self.time_start  
       #Calculate accuracy  
       count = 0  
       for i,c in enumerate(self.word):  
         try:  
           if self.input_text[i] == c:  
             count += 1  
         except:  
           pass  
       self.accuracy = count/len(self.word)*100  
       #Calculate words per minute  
       self.wpm = len(self.input_text)*60/(5*self.total_time)  
       self.end = True  
       print(self.total_time)  
       self.results = 'Time:'+str(round(self.total_time)) +" secs  Accuracy:"+ str(round(self.accuracy)) + "%" + '  Wpm: ' + str(round(self.wpm))  
       # draw icon image  
       self.time_img = pygame.image.load('icon.png')  
       self.time_img = pygame.transform.scale(self.time_img, (150,150))  
       #screen.blit(self.time_img, (80,320))  
       screen.blit(self.time_img, (self.w/2-75,self.h-140))  
       self.draw_text(screen,"Reset", self.h - 70, 26, (100,100,100))  
       print(self.results)  
       pygame.display.update()  
   def run(self):  
     self.reset_game()  
     self.running=True  
     while(self.running):  
       clock = pygame.time.Clock()  
       self.screen.fill((0,0,0), (50,250,650,50))  
       pygame.draw.rect(self.screen,self.HEAD_C, (50,250,650,50), 2)  
       # update the text of user input  
       self.draw_text(self.screen, self.input_text, 274, 26,(250,250,250))  
       pygame.display.update()  
       for event in pygame.event.get():  
         if event.type == QUIT:  
           self.running = False  
           sys.exit()  
         elif event.type == pygame.MOUSEBUTTONUP:  
           x,y = pygame.mouse.get_pos()  
           # position of input box  
           if(x>=50 and x<=650 and y>=250 and y<=300):  
             self.active = True  
             self.input_text = ''  
             self.time_start = time.time()   
            # position of reset box  
           if(x>=310 and x<=510 and y>=390 and self.end):  
             self.reset_game()  
             x,y = pygame.mouse.get_pos()  
         elif event.type == pygame.KEYDOWN:  
           if self.active and not self.end:  
             if event.key == pygame.K_RETURN:  
               print(self.input_text)  
               self.show_results(self.screen)  
               print(self.results)  
               self.draw_text(self.screen, self.results,350, 28, self.RESULT_C)   
               self.end = True  
             elif event.key == pygame.K_BACKSPACE:  
               self.input_text = self.input_text[:-1]  
             else:  
               try:  
                 self.input_text += event.unicode  
               except:  
                 pass  
       pygame.display.update()  
     clock.tick(60)  
   def reset_game(self):  
     self.screen.blit(self.open_img, (0,0))  
     pygame.display.update()  
     time.sleep(1)  
     self.reset=False  
     self.end = False  
     self.input_text=''  
     self.word = ''  
     self.time_start = 0  
     self.total_time = 0  
     self.wpm = 0  
     # Get random sentence   
     self.word = self.get_sentence()  
     if (not self.word): self.reset_game()  
     #drawing heading  
     self.screen.fill((0,0,0))  
     self.screen.blit(self.bg,(0,0))  
     msg = "Typing Speed Test"  
     self.draw_text(self.screen, msg,80, 80,self.HEAD_C)   
     # draw the rectangle for input box  
     pygame.draw.rect(self.screen,(255,192,25), (50,250,650,50), 2)  
     # draw the sentence string  
     self.draw_text(self.screen, self.word,200, 28,self.TEXT_C)  
     pygame.display.update()  
 Game().run()  
And, now if you need codes along with images, just click here. You will be redirected to the google drive page-then you download it.

Post a Comment

If you have have any doubt please let me know

Previous Post Next Post

Ads

Ads