You are on page 1of 22

ABSTRACT

To create a typing
speed test user
interface game
with Python

sachjith M
Class 12 pinnacle

COMPUTER SCIENCE
SYNOPSIS
DECLARATION

I, SACHJITH.M , of class
XII, hereby declare that the Project entitled “
TYPING SPEED TEST GUI WITH PYTHON ” submitted to
SUGUNA PIP SCHOOL: (Affiliation number – 1930213),
Nehru Nagar, Kalapatty Road, Coimbatore, Tamil Nadu –
641014. Regard to the class XII Senior Secondary
Examination for the CBSE Board, is accord of original
project work done by me under the guidance and supervision
of ALLPIOUS R, Faculty in Information technology
department, Suguna PIP School, further certify that

I. The work contained in the report is original and is


done under the general supervision of my faculty.

II. The work has not been submitted to any other


Institution/Board for class XII Senior Secondary
Examination, CBSE Board.

Name: Sachjith.M

Roll No: 4985


INDEX
1. Acknowledgement

2. Project Abstract

3. System requirements

4. Introduction about python and it’s


features

5. Project source code

6. Sample output

7. Conclusion

8. Bibliography

ACKNOWLEDGEMENT

I thank my family for supporting me to


complete my project successfully. I would like
to express my deep sense of gratitude to my
teacher, ALLPIOUS R, Faculty in Information
technology department, Suguna PIP School,
Coimbatore, for her invaluable support and
advice which helped me to complete this
project. I am honoured to be doing this under
her supervision.

I extend my gratitude to MR. POOVANNAN,


Principal and all the staff members for the
support. Finally, I heartfully thank all my dear
friends and family members, who have extended
their support and kindness intimately.
Project Abstract/Synopsis

In this Python project idea, I have built an


exciting project through which you can check
and improve your typing speed.

For an eye candy graphical user interface,


pygame library has been used. which is used for
working with graphics.

The program analyses your typing speed,


accuracy to that of the provided document
(essay.txt) and finds simple errors using time,
sys modules. The user can try unlimited times
with the try again option.

Thank you : )
System Requirements

Recommended System Requirements

Processors:
Intel® Core™ i3 processor 4300M at 2.60
GHz.
Disk space: 2 to 4 GB.
Operating systems: Windows® 10,
MACOS, and UBUNTU.
Python Versions: 3.X.X or Higher.

Minimum System Requirements

Processors:
Intel Atom® processor or Intel® Core™
i3 processor.
Disk space: 1 GB.
Operating systems: Windows 7 or later,
MACOS, and UBUNTU.
Python Versions: 2.7.X, 3.6.X. (pygame)
Introduction about python and it’s
features

Python is a high-level, interpreted, interactive and object-oriented


scripting language. Python is designed to be highly readable. It uses
English keywords frequently where as other languages use
punctuation, and it has fewer syntactical constructions than other
languages.

 Python is Interpreted − Python is processed at runtime by the


interpreter. You do not need to compile your program before
executing it. This is similar to PERL and PHP.
 Python is Interactive − You can actually sit at a Python
prompt and interact with the interpreter directly to write
your programs.
 Python is Object-Oriented − Python supports Object-
Oriented style or technique of programming that encapsulates
code within objects.

Features:

Python's features include −

# Easy-to-learn − Python has few keywords, simple structure,


and a clearly defined syntax. This allows the student to pick up the
language quickly.

#A broad standard library − Python's bulk of the library is


very portable and cross-platform compatible on UNIX, Windows, and
Macintosh.
#Interactive Mode − Python has support for an interactive
mode which allows interactive testing and debugging of snippets of
code.

# Databases − Python provides interfaces to all major


commercial databases.
#GUI Programming − Python supports GUI applications that
can be created and ported to many system calls, libraries and
windows systems, such as Windows MFC, Macintosh, and the X
Window system of Unix.
Project source code

#source code start

startingimage = 'bg.jpg'

backgroundimage = 'bg.jpg'

essay = 'essay.txt'

icon = 'icon.png'

import sys

import time

import random

import pygame

from pygame.locals import *

class Test:

def __init__(self):

self.color_heading = (255,213,102)

self.color_text = (255,0,0)

self.color_results = (255,70,70)

self.w=750

self.h=500

self.reset=True

self.wpm = 0
self.end = False

self.active = False

self.input_text=''

self.word = ''

self.results = 'Time:0 Accuracy:0 % WPM:0 '

self.start_time = 0

self.overall_time = 0

self.accuracy = '0%'

pygame.init()

self.image_open = pygame.image.load(startingimage)

self.image_open = pygame.transform.scale(self.image_open,
(self.w,self.h))

self.bg = pygame.image.load(backgroundimage)

self.bg = pygame.transform.scale(self.bg, (500,750))

self.screen = pygame.display.set_mode((self.w,self.h))

pygame.display.set_caption('Typing Speed Test')

def draw_text(self, screen, message, y_val ,f_size, color):


font = pygame.font.Font(None, f_size)

text = font.render(message, 1,color)

text_rect = text.get_rect(center=(self.w/2, y_val))

screen.blit(text, text_rect)

pygame.display.update()

def get_challenge(self):

return random.choice(open(essay).read().split('\n'))

def results_show(self, screen):

if(not self.end):

# Calculate time ellapsed

self.overall_time = time.time() - self.start_time

count = 0

for i,c in enumerate(self.word):

try:

if self.input_text[i] == c:

count = count + 1

except:

pass

# count is the number of correct typed characters

# Calculate accuracy using given formula

self.accuracy = (count*100)/len(self.word)
#Calculate Words per Minute

self.wpm = (len(self.input_text)*60)/(5*self.overall_time)

self.end = True

print(self.overall_time)

self.results = 'Time:'+str(round(self.overall_time)) +" secs


Accuracy:"+ str(round(self.accuracy)) + "%" + ' WPM: ' +
str(round(self.wpm))

# Draw Icon image

self.time_img = pygame.image.load(icon)

self.time_img = pygame.transform.scale(self.time_img,
(150,150))

screen.blit(self.time_img, (self.w/2-75,self.h-140))

self.draw_text(screen,"", self.h - 70, 26, (255,0,0))

print(self.results)

pygame.display.update()

def run(self):

# everytime we run it should automatically reset the variables

self.reset_game()

# a variable which shows the state of game whether

# it is running or not
self.running=True

# we will run an infinite loop till the running is True

while(self.running):

clock = pygame.time.Clock()

self.screen.fill((0,0,0), (50,250,650,50))

pygame.draw.rect(self.screen,self.color_heading,
(50,250,650,50), 2)

# Update the text of user input dynamically

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:

# get the position of mouse pointer x,y

x,y = pygame.mouse.get_pos()

# position of input box

# these x and y values should lie as

# x = [50,650] and y = [250,300] because the timer

# will start when user clicks the input box


if(x>=50 and x<=650 and y>=250 and y<=300):

self.active = True

self.input_text = ''

self.start_time = 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.results_show(self.screen)

print(self.results)

self.draw_text(self.screen, self.results,350, 28,


self.color_results)

self.end = True

# event handler for backspace

# i.e simply take the string upto the second last


character

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 timer

clock.tick(60)

def reset_game(self):

self.screen.blit(self.image_open, (0,0))

pygame.display.update()

time.sleep(1)

# reset all the project variables.

self.reset=False

self.end = False

self.input_text=''

self.word = ''

self.start_time = 0
self.overall_time = 0

self.wpm = 0

self.word = self.get_challenge()

if (not self.word): self.reset_game()

self.screen.fill((0,0,0))

self.screen.blit(self.bg,(0,0))

message = "Typing Speed Test"

self.draw_text(self.screen, message,80, 80,self.color_heading)

pygame.draw.rect(self.screen,(255,192,25), (50,250,650,50),
2)

self.draw_text(self.screen, self.word,200, 28,self.color_text)

pygame.display.update()

if __name__=='__main__':

Test().run()
bg.jpg

essay.txt
Icon.jpg
SAMPLE OUTPUT
CONCLUSION AND SCOPE OF
IMPROVEMENT

This project is a simple self-made fast typing


program to test your own typing speed:

1. Choose the appropriate essay.txt file and start


practising it to work on your typing speed, for
example, practise typing sheets can be found on the
internet just copy paste the content into essay.txt
file and start practising.

2. More information can be added about the grammar


and spelling mistakes.

These modifications could be done to the same


program, hence allowing itself to be modified as per
convenience.
BIBILIOGRAPHY

1. Sumita Arora- Computer Science with Python,


9th ed., Textbook for class XI (2019), Dhanpat
Rai & Co., (ISBN 978-81-7700-230-0)

2. Sumita Arora, Computer Science with Python,


13th ed., Textbook for class XII (2020),
Dhanpat Rai & Co.,
(ISBN 978-81-7700-236-2)

3. https://techvidvan.com/tutorials/project-in-
python-typing-speed-test/

You might also like