CGR Micro Complete Project
CGR Micro Complete Project
MICRO PROJECT
ON
SUBMITTED BY -
1
DEPARTMENT OF COMPUTER ENGINEERING
SHREE DATTA POLYTECHNIC COLLEGE, DATTANAGAR.
Certificate
This is to certify that the Micro project work entitled
2
DEPARTMENT OF COMPUTER ENGINEERING
ACKNOWLEDGEMENT
Last but not least, we would like to thank our friends, parents and
group members for their belief and patience in our endeavor.
Index
SR.NO TITLE PAGE NO.
1 Abstract 5
2 Introduction 6
3 Algorithm 8
3
4 Flowchart 9
5 Program 10
6 Output 30
7 Advantages 33
8 Conclusion 34
9 Bibliography 35
Abstract
4
Introduction
1.1 Introduction to the graphics:
Computer graphics is one of the most exciting and rapidly growing computer field and computer. It is
also an extremely effective medium for communication between men.
The human can understand the information content of a displayed diagram or perceptive view much
faster than it can understand a table of numbers.
5
There is a lot of development in hardware and software required to generate images, and now-a-days
the cost of such hardware and software is also dropping rapidly. Due to this the interactive computer
graphics is becoming available to more and more people.
Computer graphics today is largely interactive. The user controls the contents, structure and appearance
of the objects and of their displayed images by using input devices, such as keyboard, mouse or touch
sensitive panel on the screen. Because of the close relationship between the input devices and display,
the handling of such devices is included in the study of computer graphics.
1.2 OpenGL
OpenGL (open graphic library) is a standard specification defining a cross language cross platform API for
writing application that produces 2D and 3D computer graphics. The interface consists of over 250
different function calls which can be used to draw complex 3D scenes from simple primitives. OpenGL
was developed by Silicon Graphics Inc. (SGI) in 1992 and is widely used in CAD, virtual reality, scientific
visualization, information visualization and flight simulation. It is also used in video games, where it
competes with direct 3D on Microsoft Windows Platforms, OpenGL is managed by the nonprofit
technology consortium, the Khronos group Inc.
Archery game is a precision sport where the competitors aim and shoot at the target using the arrow.
Tip
Shaft
Nock
Tip of the arrow is used to hit the target. Tip is drawn using a triangle. Shaft of arrow is drawn using
lines. Nock is drawn using quads.
6
The target used is a block which is drawn using point and enclosing the point within lone loop to
create boundary for the target such that only the point hit by the player disappears the target.
Disappearing is highlighted by drawing the target hit by the player using white color which appears as a
hole. This game needs good vision and good concentration.
Algorithm
Step 1: start
Step 2: Initialize the graphics windows and its size using GLUT functions.
Step 3 : Register the keyboard and display call backs in main function.
7
Step 5 : Arrows starts moving upwards as soon as we enter the output screen.
Step 6 : When the arrow starts moving the key ‘r’ is pressed, which moves towards right in order to hit
the block.
Step 7 : If the key ‘r’ is pressed at the correct position it hit the block or else it fails to hit the block.
Step 8 : If the player fails to hit the ‘10’ blocks using ‘15’ arrows then it will display a message as “no
arrows game over you lost”.
Step 9 : else
Step 11 : By pressing a key ‘n’ the player can start new game.
Step 12: By pressing a key ‘q’ the player can quit/exit the game at any point of the stage.
Flowchart
8
Program
#include<stdio.h>
9
#include<GL/glut.h>
#include<string.h>
int maxy=600;
int count=0;
int maxx=500;
int view=0;
int n=3;
int m=3;
int
count1=0,count2=0,count3=0,count4=0,count5=0,count6=0,count7=0,count8=0,count9=0,count10=0;
void id1();
void id();
void draw_target();
void counting()
sprintf(str,"No of Arrows:%d",count);
display_string(40,40,str,2);
if(count1==1&&count2==1&&count3==1&&count4==1&&count5==1&&count6==1&&count7==1&&cou
nt8==1&&count9==1&&count10==1)
display_string(5,300,"CONGRATULATION U WON",1);
display_string(5,80,"PRESS q TO EXIT",2);
10
glutIdleFunc(NULL);
else if(count>=15)
display_string(5,80,"PRESS q TO EXIT",2);
glutIdleFunc(NULL);
void disa()
if((x+110==300)&&(y>=435&&y<=465)&&(!count1))
count1=1;
x=25;
y=0;
count++;
glutIdleFunc(id);
else if ((x+110==375)&&(y>=385&&y<=415)&&(!count2))
11
{
count2=1;
x=25;
y=0;
count++;
glutIdleFunc(id);
count3=1;
x=25;
y=0;
count++;
glutIdleFunc(id);
else if((x+110==249)&&(y>=355&&y<=385)&&(!count4))
count4=1;
x=25;
y=0;
count++;
glutIdleFunc(id);
else if((x+110==351)&&(y>=315&&y<=345)&&(!count5))
count5=1;
x=25;
y=0;
count++;
12
glutIdleFunc(id);
else if((x+110==450)&&(y>=275&&y<=305)&&(!count6))
count6=1;
x=25;
y=0;
count++;
glutIdleFunc(id);
else if((x+110==330)&&(y>=230&&y<=260)&&(!count7))
count7=1;
x=25;
y=0;
count++;
glutIdleFunc (id);
else if((x+110==201)&&(y>=185&&y<=215)&&(!count8))
count8=1;
x=25;
y=0;
count++;
glutIdleFunc(id);
else if((x+110==399)&&(y>=135&&y<=165)&&(!count9))
count9=1;
13
x=25;
y=0;
count++;
glutIdleFunc(id);
else if((x+110==300)&&(y>=85&&y<=115)&&(!count10))
count10=1;
x=25;
y=0;
count++;
glutIdleFunc(id);
void id()
if(view==1)
y+=n;
disa();
if(y>maxy)
y=0;
count++;
14
}
glutPostRedisplay();
int len,i;
glColor3f(0.8,0.52,1.0);
glRasterPos2f(x, y);
if(font==1)
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,string[i]);
if(font==2)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18,string[i]);
if(font==3)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,string[i]);
if(font==4)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10,string[i]);
void display1(void)
glClearColor(0.0,0.5,0.5,1.0);
15
display_string(215,300,"ARCHERY GAME",1);
display_string(100,250,"MOUSE",2);
display_string(100,210,"KEYBOARD",2);
glutPostRedisplay();
glutSwapBuffers();
void init()
glClearColor(0,0.5,0.5,1);
glColor3f(1,0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,500,0,500);
glMatrixMode(GL_MODELVIEW);
void disp()
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
16
if(view==0)
init();
display1();
else
glLoadIdentity();
glColor3f(1,1,0);
display_string(150,450,"ARCHERY GAME",1);
counting();
// Drawing of arrow
glColor3f(0,1,1);
glBegin(GL_LINES);
glVertex2d(x,y);
glVertex2d(x+100,y);
glEnd();
glLineWidth(2);
glBegin(GL_LINES);
glVertex2d(x,y+2);
glVertex2d(x+100,y+2);
glEnd();
glBegin(GL_LINES);
glVertex2d(x,y-2);
glVertex2d(x+100,y-2);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f(1,0,0);//color of tip
17
glVertex2d(x+100,y+3);
glVertex2d(x+110,y);
glVertex2d(x+100,y-3);
glEnd();
glBegin(GL_QUADS);
glVertex2d(x,y+3);
glVertex2d(x,y-3);
glVertex2d(x-10,y-5);
glVertex2d(x-10,y+5);
glEnd();
draw_target();
// Drawing of target
glFlush();
glutSwapBuffers();
void draw_target()
if(count1==0)
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(300,450);
glEnd();
glBegin(GL_LINE_LOOP);
18
glVertex2d(285,465);
glVertex2d(315,465);
glVertex2d(315,435);
glVertex2d(285,435);
glEnd();
else
glColor3f(1,1,1);
glPointSize(20);
glBegin(GL_POINTS);
glVertex2d(300,450);
glEnd();
if(count2==0)
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(375,400);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(360,415);
glVertex2d(390,415);
glVertex2d(390,385);
glVertex2d(360,385);
glEnd();
else
19
{
glColor3f(1,1,1);
glPointSize(20);
glBegin(GL_POINTS);
glVertex2d(375,400);
glEnd();
if(count3==0)
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(400,480);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(385,495);
glVertex2d(415,495);
glVertex2d(415,465);
glVertex2d(385,465);
glEnd();
}else
glColor3f(1,1,1);
glPointSize(20);
glBegin(GL_POINTS);
glVertex2d(400,480);
glEnd();
if(count4==0)
20
{
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(250,370);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(235,385);
glVertex2d(265,385);
glVertex2d(265,355);
glVertex2d(235,355);
glEnd();
}else
glColor3f(1,1,1);
glPointSize(20);
glBegin(GL_POINTS);
glVertex2d(250,370);
glEnd();
if(count5==0)
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(350,330);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(335,345);
21
glVertex2d(365,345);
glVertex2d(365,315);
glVertex2d(335,315);
glEnd();
}else
glColor3f(1,1,1);
glPointSize(20);
glBegin(GL_POINTS);
glVertex2d(350,330);
glEnd();
if(count6==0)
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(450,290);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(435,305);
glVertex2d(465,305);
glVertex2d(465,275);
glVertex2d(435,275);
glEnd();
}else
glColor3f(1,1,1);
glPointSize(20);
22
glBegin(GL_POINTS);
glVertex2d(450,290);
glEnd();
if(count7==0)
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(330,245);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(315,260);
glVertex2d(345,260);
glVertex2d(345,230);
glVertex2d(315,230);
glEnd();
else
glColor3f(1,1,1);
glPointSize(20);
glBegin(GL_POINTS);
glVertex2d(330,245);
glEnd();
if(count8==0)
glColor3f(1,0,1);
23
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(200,200);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(185,215);
glVertex2d(215,215);
glVertex2d(215,185);
glVertex2d(185,185);
glEnd();
else {
glColor3f(1,1,1);
glPointSize(20);
glBegin(GL_POINTS);
glVertex2d(200,200);
glEnd();
if(count9==0)
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(400,150);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(385,165);
glVertex2d(415,165);
glVertex2d(415,135);
24
glVertex2d(385,135);
glEnd();
else
glColor3f(1,1,1);
glPointSize(20);
glBegin(GL_POINTS);
glVertex2d(400,150);
glEnd();
if(count10==0)
glColor3f(1,0,1);
glPointSize(30);
glBegin(GL_POINTS);
glVertex2d(300,100);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2d(285,115);
glVertex2d(315,115);
glVertex2d(315,85);
glVertex2d(285,85);
glEnd();
else
glColor3f(1,1,1);
glPointSize(20);
25
glBegin(GL_POINTS);
glVertex2d(300,100);
glEnd();
glFlush();
void id1()
x+=m;
disa();
if(x+110>maxx)
x=25;
y=0;
count++;
glutIdleFunc(id);
glutPostRedisplay();
switch(k){
disp();
view=1;
26
break;
break;
maxy=600;
count=0;
maxx=500;
view=1;
n=3;
m=3;
count1=0,count2=0,count3=0,count4=0,count5=0,count6=0,count7=0,count8=0,count9=0,count10=0;
x=25, y=50;
disp();
glutIdleFunc(id);
break;
exit(0);
void demo_menu(int i)
27
switch(i)
case 5:
case 6:
case 7:
case 8:break;
void demo(int i)
switch(i)
case 9:
case 10:
case 11:break;
switch(id)
int sub_menu,submenu;
28
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(900,900);
glutCreateWindow("ARCHERY GAME");
sub_menu=glutCreateMenu(demo_menu);
glutAddMenuEntry("otherwise win",8);
submenu=glutCreateMenu(demo);
glutAddMenuEntry("AKASH",9);
glutAddMenuEntry("ZEESHAN",10);
glutCreateMenu(game);
glutAddSubMenu("INSTRUCTION",sub_menu);
glutAddSubMenu("ABOUT",submenu);
glutAddMenuEntry("QUIT",2);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutDisplayFunc(disp);
glutIdleFunc(id);
glutKeyboardFunc(keys);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
Output
29
30
31
32
Advantages
Though the proposed game is an action game, it doesn’t involve direct violence. No zombie killing,anima
l killing, or human killing is performed in the game. So it can also be viewed as a non-violence game.Kids
can also play this game, because the design of the game is very simple, controlling the gameis very easy
pressing some neighboring keys of the keyboard.
This Report describes all the requirements for the project. The purpose of this research is to providea
virtual image for the combination of both structured and unstructured information of our project
“Archery”. This is a single-
player strategy game on the Windows platform. The player willprogress through levels which require
precise manipulation of the environment, though the gameEncourages creativity and daring via branchi
ng pathways. The episodic structure of the gamefacilitates the pace of the story. I demonstrate the actio
n flow between inputs, script, display(output).We are working mainly with story, levels, object, animatio
n, graphics, scripts, gameengine facilities
33
Conclusion
We have tried out level best to build the project efficiently and correctly and have succeeded in
building a better project, but may not be a best project. We have implemented the required
functions which we had stated earlier. After all testing process, the game is now ready to be
played.
We strive to provide clear explanation and inter-subject continuity in our presentation illustrative
examples are used to substantiate discussion on abstract concepts while the primary mission is to
offer relative well-focused introduction to the fundamental theory and underlying technology,
significant variations in such matters as basic definitions and implementation protocols are
presented in order to have a reasonably broad coverage of the field. In addition, interesting
applications are introduced as early as possible to highlight the usefulness of the graphics
technology. However, user requirements tend to change and provision for change in design has
been allowed .if no major requirements, which are too complex for current design, are made then
the current design holds.
34
Bibliography
https://www.google.com/
https://www.vtuloop.com/
https://github.com/
https://cglabprojects.blogspot.com/2014/02/archery.html
35