Mad Report
Mad Report
Submitted by
SANDHIYA M (953622205037)
BACHELOR OF TECHNOLOGY
RAJAPALAYAM-626 117
APRIL 2025
Certified that this Report titled “ROCK PAPER SCISSORS GAME” is the
bonafide work of SANDHIYA M (953622205037) who carried out the work
under my supervision. Certified further that to the best of my knowledge the
work reported herein does not form part of any other thesis or dissertation on
the basis of which a degree or award was conferred on an earlier occasion on
this or any other candidate.
SIGNATURE SIGNATURE
M. Rethina kumari Dr. V. Anusuya
SUPERVISOR HEAD OF THE DEPARTMENT
Assistant Professor, Associate Professor,
Department of Information Technology, Department of
InformatioTechnology,
Ramco Institute of Technology Ramco Institute of Technology
Rajapalayam-626 112. Rajapalayam-626 112.
Date : / /2025.
ACKNOWLEDGEMENT
Last but not least, I extend my sincere thanks to my friends and family
members for their unwavering support and encouragement throughout my
project journey.
ABSTRACT
The Rock Paper Scissors Game is a free and open-source mobile application
designed to offer a fun and engaging way to enjoy the classic hand game in a
digital format. In an era where many casual games are bloated with ads and
hidden data tracking, this app stands out by respecting user privacy and
delivering an ad-free experience.
Built using Flutter and Dart, the game offers a smooth, responsive, and
consistent performance across Android devices. It features intuitive controls and
clean visuals, making it easy for players of all ages to enjoy quick matches
against the computer. The app also supports both single-player (vs
AI) and local multiplayer modes, allowing users to challenge friends in real
time on the same device.
With a focus on simplicity, speed, and user autonomy, the Rock Paper Scissors
Game works fully offline, with no tracking, no data collection, and no cloud
dependency. All interactions stay on-device, ensuring a lightweight and secure
experience. The source code is openly available, encouraging developers and
enthusiasts to contribute, customize, or extend gameplay features.
Whether you're taking a short break, teaching kids simple game mechanics, or
just having fun with friends, this app provides a respectful, ethical, and user-
friendly approach to digital gaming.
TABLE OF CONTENTS
Chapter No. Contents Page No
1 Introduction
2 System Requirements
3 System Design
4 Implementation/Methodology
5 Experimental Results
6 Conclusion
References
1. INTRODUCTION
The Rock Paper Scissors Game is a cross-platform mobile application
developed using Flutter, designed to offer users a simple, fun, and engaging
way to play the classic hand game against an AI opponent or a local friend. In
today’s mobile gaming environment, users often face intrusive ads, data
tracking, or online-only requirements. This app eliminates those concerns by
providing a lightweight, privacy-friendly, offline-capable gaming experience.
The game features a clean and responsive interface that’s accessible to users of
all ages. With fast gameplay loops, score tracking, and animated interactions,
the app combines entertainment with ease of use. Built with Flutter, it ensures
seamless performance across both Android and iOS devices.
2. SYSTEM REQUIREMENTS
2.1 HARDWARE & SOFTWARE REQUIREMENTS
Hardware Requirements:
Processor: Dual-core or higher (recommended: Quad-core for
development)
RAM: Minimum 4 GB (8 GB or higher for development)
Storage: At least 500 MB free for app and dependencies
Graphics: Integrated GPU sufficient; dedicated GPU recommended for
emulator use
Software Requirements:
OS: Windows, macOS, or Linux (64-bit)
Flutter SDK: Latest stable version
IDE: Android Studio or Visual Studio Code
Mobile Emulator or Physical Device: For Android/iOS testing
Version Control: Git (with platforms like GitHub or GitLab)
2. Functional Requirements
Play single-player vs AI.
Play multiplayer locally on the same device.
Choose Rock, Paper, or Scissors with animated UI.
Display round outcome with visual feedback.
Track and display scores during gameplay.
Reset game at any time.
3. Non-Functional Requirements
Performance: Instant gameplay, quick feedback.
Usability: Clean UI with Material Design.
Reliability: Runs smoothly offline; consistent results.
Security: No data collection or tracking.
Portability: Runs on both Android and iOS via Flutter.
3. SYSTEM DESIGN
3.1 MODULES OF THE SYSTEM
1. Player Interaction Module
Handles user input for choosing Rock, Paper, or Scissors.
Shows choices through icons and animations.
Provides vibration/sound feedback on selection.
1. Launch App: The user opens the Rock Paper Scissors game on their
device.
2. Welcome Screen: Displays the game title with a button to start the
match.
3. Game Screen: The user selects one of the options: Rock, Paper, or
Scissors.
5. Result Evaluation: The app compares both moves and determines the
result – Win, Lose, or Draw.
6. Display Result: Shows the player's move, opponent's move, and the
result with an option to play again.
7. Logout or Exit: The user can exit or return to the home screen.
4. Implementation / Methodology
IMPLEMENTATION
Clean, minimalist UI
Development Methodology
RequirementAnalysis:
Defined the core features like move selection, random opponent logic,
result display, and replay. The focus was on simplicity, fun interaction,
and mobile responsiveness.
SystemDesign:
UI wireframes and game flow diagrams were created using tools like
Whimsical and Figma. The result logic (Rock > Scissors, Scissors >
Paper, Paper > Rock) was mapped in the backend logic.
Implementation:
Built using Flutter and Dart. The game logic was managed using simple
state management (setState). Interactive UI elements like buttons and
images were integrated for player choices.
Testing:
Manual testing was done to ensure correct game results, UI
responsiveness, and consistent performance across devices. Edge cases
(e.g., repeated draws) were also checked.
Deployment:
The APK was generated for Android and tested on real devices.
Emulator testing was performed across screen sizes to validate layout
adaptability.
Maintenance:
Future plans include adding score tracking, animations for choices, and
possibly a multiplayer version or AI difficulty levels.
Pubspec.yaml:
name: RockPaperScissors
version: 1.0.0+1
environment:
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
flutter:
uses-material-design: true
main.dart:
import 'dart:math';
import 'package:flutter/material.dart';
void main() {
runApp(RockPaperScissorsApp());
}
class RockPaperScissorsApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Rock Paper Scissors',
theme: ThemeData(
primarySwatch: Colors.deepPurple,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: RockPaperScissorsGame(),
);
}
}
class RockPaperScissorsGame extends StatefulWidget {
@override
_RockPaperScissorsGameState createState() =>
_RockPaperScissorsGameState();
}
class _RockPaperScissorsGameState extends State<RockPaperScissorsGame>
with SingleTickerProviderStateMixin {
final List<String> options = ['Rock', 'Paper', 'Scissors'];
String? userChoice;
String? aiChoice;
String result = '';
int userScore = 0;
int aiScore = 0;
bool showChoices = false;
late AnimationController _controller;
late Animation<double> _animation;
@override
void initState() {
super.initState();
_controller =
AnimationController(vsync: this, duration: Duration(milliseconds: 500));
_animation = CurvedAnimation(parent: _controller, curve: Curves.easeIn);
}
void playGame(String choice) {
final random = Random();
final ai = options[random.nextInt(options.length)];
setState(() {
userChoice = choice;
aiChoice = ai;
showChoices = true;
_controller.forward(from: 0);
result = determineWinner(choice, ai);
if (result == 'You Win!') {
userScore++;
} else if (result == 'AI Wins!') {
aiScore++;
}
});
}
String determineWinner(String user, String ai) {
if (user == ai) return 'It\'s a Draw!';
if ((user == 'Rock' && ai == 'Scissors') ||
(user == 'Paper' && ai == 'Rock') ||
(user == 'Scissors' && ai == 'Paper')) {
return 'You Win!';
}
return 'AI Wins!';
}
Widget buildGesture(String label, IconData icon, VoidCallback onTap) {
return GestureDetector(
onTap: () => playGame(label),
child: Column(
children: [
CircleAvatar(
radius: 30,
child: Icon(icon, size: 30),
backgroundColor: Colors.deepPurpleAccent,
),
SizedBox(height: 8),
Text(label),
],
),
);
}
Widget buildAnimatedChoice(String label) {
return FadeTransition(
opacity: _animation,
child: Column(
children: [
Icon(
label == 'Rock'
? Icons.circle
: label == 'Paper'
? Icons.note
: Icons.content_cut,
size: 50,
),
Text(label, style: TextStyle(fontSize: 16)),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Rock Paper Scissors'),
centerTitle: true,
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
Text('Choose Your Move',
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
buildGesture('Rock', Icons.circle, () => playGame('Rock')),
buildGesture('Paper', Icons.note, () => playGame('Paper')),
buildGesture(
'Scissors', Icons.content_cut, () => playGame('Scissors')),
],
),
SizedBox(height: 40),
if (showChoices) ...[
Text('You Chose:', style: TextStyle(fontWeight: FontWeight.bold)),
buildAnimatedChoice(userChoice ?? ''),
SizedBox(height: 20),
Text('AI Chose:', style: TextStyle(fontWeight: FontWeight.bold)),
buildAnimatedChoice(aiChoice ?? ''),
SizedBox(height: 20),
Text(result,
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),
SizedBox(height: 20),
],
Divider(),
Text('Scoreboard',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
SizedBox(height: 10),
Text('You: $userScore | AI: $aiScore',
style: TextStyle(fontSize: 18)),
],
),
),
);
}
}
5.Experimental Results
The system was tested under various conditions to evaluate its performance,
functionality, and usability.
References
Flutter Documentation – https://docs.flutter.dev
Dart Language Guide – https://dart.dev/guides
Random Number Generator
– https://api.flutter.dev/flutter/dart-math/Random-class.html
Flutter UI Widgets – https://docs.flutter.dev/ui/widgets
Material Design Guidelines – https://m3.material.io/
Flutter Testing – https://docs.flutter.dev/testing
Android Developers – App UI and Interactivity
Apple Developer Documentation – UI Design and Interactions