46573 (607867), страница 2

Файл №607867 46573 (Java-гра "Тетріс") 2 страница46573 (607867) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Запустивши гру фігури починають спускатися. Для управління фігурою треба користуватись клавішами навігації. Для того, щоб призупинити гру треба натиснути кнопку «Pause» або клавішу F3. Для продовження гри треба натиснути кнопку «Resume» або клавішу F3. Для початку нової гри треба вибрати пункт меню «Start New Game» або натиснути клавішу F2, а для того, щоб зупинити гру зовсім – вибрати пункт меню «Stop Game». Для виходу з гри треба вибрати пункт меню «Exit» або просто закрити програму.

Додаток В Інструкція з встановлення

  1. На комп’ютері повинна бути встановлена JRE 6.3(віртуальна машина Java)

  2. Монітор повинен підтримувати режим 1024х768х24bit

  3. 45kb на жорсткому диску

  4. Щоб виконати проект з командного рядка, перейдіть до каталогу, де знаходиться файл і наберіть наступне: Java -jar "TetrisGame.jar", або запустіть програму подвійним клацанням миші.

Додаток Г Лістинг програми

Файл GamePanel.java

package Tetr;

import java.awt.event.*;

/**

*

* @author irdis_13

*/

interface GamePanel extends ActionListener{

final static int PLAY = 1;

final static int STOP = 2;

final static int PAUSE =3;

public void startNewGame();

public void pauseGame();

public void resumeGame();

public void stopGame();

public int getScore();

public int getState();

public void figureMoveRight();

public void figureMoveLeft();

public void figureMoveDown();

public void figureRotate();

public void gamePauseResume();

}

Файл Tetris.java

package Tetr;

/**

*

* @author irdis_13

*/

public class Tetris {

public static void main(String[] args) throws InterruptedException {

TetrisFrame.setDefaultLookAndFeelDecorated(true);

TetrisFrame frame = new TetrisFrame();

frame.setVisible(true);

String s = "D:\\FirstProb2\\src\\Tetr\\tetris.mid";

if (args.length>0)

s = args[0];

new PlaySound(s);

}

}

Файл ButtonPanel.java

package Tetr;

/**

*

* @author irdis_13

*/

public class ButtonPanel extends javax.swing.JPanel {

private TetrisFrame frame;

public ButtonPanel(TetrisFrame frame) {

this.frame = frame;

initComponents();

}

// //GEN-BEGIN:initComponents

private void initComponents() {

jButton1 = new javax.swing.JButton();

jButton2 = new javax.swing.JButton();

setFocusable(false);

jButton1.setText("Resume");

jButton1.setFocusable(false);

jButton1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton1ActionPerformed(evt);

}

});

add(jButton1);

jButton2.setText("Pause");

jButton2.setFocusable(false);

jButton2.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton2ActionPerformed(evt);

}

});

add(jButton2);

}// //GEN-END:initComponents

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed

frame.continueButtonPressed(evt);

}//GEN-LAST:event_jButton1ActionPerformed

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed

frame.pauseButtonPressed(evt);

}//GEN-LAST:event_jButton2ActionPerformed

// Variables declaration - do not modify//GEN-BEGIN:variables

private javax.swing.JButton jButton1;

private javax.swing.JButton jButton2;

// End of variables declaration//GEN-END:variables

}

Файл Figure.java

package Tetr;

import java.util.Random;

import java.awt.*;

/**

*

* @author irdis_13

*/

public class Figure {

final static byte[][][] PATTERN = {

{{0,0,0,0}, // "пустой" шаблон - просто для удобства

{0,0,0,0},

{0,0,0,0},

{0,0,0,0}

},

{

{1}, //

{1},

{1},

{1}

},

{{2,0},

{2,0},

{2,2}

},

{{0,3},

{0,3},

{3,3}

},

{{4,0},

{4,4},

{4,0}

},

{{5,0},

{5,5},

{0,5}

},

{{0,6},

{6,6},

{6,0}

},

{{7,7},

{7,7}

}

};

final static Color[] COLORS = {

Color.GRAY,

Color.BLUE,

Color.CYAN,

Color.GREEN,

Color.MAGENTA,

Color.RED,

Color.PINK,

Color.YELLOW

};

private int type;

private int[][] pat;

private int x,y,rotation;

private static Random r = new Random();

private static int nextType = 0;

private static int nextRot = -1;

public Figure() {

if (nextType==0) {

type = r.nextInt(PATTERN.length-1)+1;

rotation = r.nextInt(4);

} else {

type = nextType;

rotation = nextRot;

}

nextType = r.nextInt(PATTERN.length-1)+1;

y = 0; x = 4;

nextRot = r.nextInt(4);

pat = new int[PATTERN[type].length]

[PATTERN[type][0].length];

for (int i=0; i

for (int j=0; j

pat[i][j] = PATTERN[type][i][j];

}

for (int i=0; i

}

public int getX() {

return x;

}

public int getY() {

return y;

}

public int getHeight() {

return pat.length;

}

public int getWidth() {

return pat[0].length;

}

public int getCell(int i, int j) {

if (i=pat.length || j=pat[0].length) return 0;

return pat[i][j];

}

public void draw(Graphics g) {

for (int i=0; i

for (int j=0; j

if (pat[i][j]!=0){

g.setColor(COLORS[pat[i][j]]);

g.fillRect((x+j)*30+11,(i+y)*30+1,28,28);

}

}

drawNext(g,350,50);

}

public void drawNext(Graphics g, int px, int py) {

int[][] p = new int[PATTERN[nextType].length][PATTERN[nextType][0].length];

for (int i=0; i

for (int j=0; j

p[i][j] = PATTERN[nextType][i][j];

}

}

for (int kr=0; kr

int[][] p2 = new int[p[0].length][p.length];

for (int i=0; i

for (int j=0; j

p2[j][i] = p[i][j];

}

}

p = new int[p2.length][p2[0].length];

for (int i=0; i

p[i][j] = p2[p.length-i-1][j];

}

}

for (int i=0; i<4; i++) for (int j=0; j<4; j++) {

g.setColor(COLORS[0]);

g.fillRect(j*30+px, i*30+py, 28,28);

}

for (int i=0; i

g.setColor(COLORS[p[i][j]]);

g.fillRect(j*30+px, i*30+py, 28,28);

}

}

public void rotate() {

int[][] newPat = new int[pat[0].length][pat.length];

for (int i=0; i

newPat[j][i] = pat[i][j];

}

pat = new int[newPat.length][newPat[0].length];

for (int i=0; i

pat[i][j] = newPat[pat.length-i-1][j];

}

}

public boolean canDown(Glass stakan) {

int[][] a = new int[21][10];

for (int i = 0; i

for (int j = 0; j

a[i][j] = stakan.getCell(i,j);

}

}

for (int i=0; i

for (int j=0; j

int xx = x+j, yy = y+i+1;

if (pat[i][j]>0 && a[yy][xx]>0) {

return false;

}

}

}

return true;

}

public void moveDown() {

y++;

}

public boolean canLeft(Glass stakan) {

if (x==0) return false;

int [][] s = new int[pat.length][pat[0].length];

for (int i=0; i

s[i][j] = stakan.getCell(y+i,j+x-1);

}

for (int i=0; i

if (s[i][j]*pat[i][j]>0) {

return false;

}

}

return true;

}

public boolean canRight(Glass stakan) {

if (x==stakan.getWidth()-pat[0].length) return false;

int [][] s = new int[pat.length][pat[0].length];

for (int i=0; i

s[i][j] = stakan.getCell(y+i,j+x+1);

}

for (int i=0; i

if (s[i][j]*pat[i][j]>0) {

return false;

}

}

return true;

}

public boolean canRotate(Glass stakan) {

if (x+pat.length>stakan.getWidth()) return false;

int[][] tmpPat = new int[pat[0].length][pat.length];

for (int i=0; i

tmpPat[j][i] = pat[i][j];

}

int[][] tPat = new int[tmpPat.length][tmpPat[0].length];

for (int i=0; i

tPat[i][j] = tmpPat[tPat.length-i-1][j];

}

int [][] s = new int[tPat.length][tPat[0].length];

for (int i=0; i

s[i][j] = stakan.getCell(y+i,j+x);

}

for (int i=0; i

if (s[i][j]*tPat[i][j]>0) {

return false;

}

}

return true;

}

public void moveLeft() {

if (x>0) {

x--;

}

}

public void moveRight() {

if (x<10-pat[0].length) {

x++;

}

}

}

Файл Glass.java

package Tetr;

import java.awt.*;

/**

*

* @author irdis_13

*/

public class Glass {

private int[] x = {0, 10, 10, 310, 310, 320, 320, 0};

private int[] y = {0, 0, 600, 600, 0, 0, 610, 610};

private int[][] cells = new int[21][10];

public Glass() {

clearGlass();

}

public void clearGlass() {

for (int i = 0; i

for (int j = 0; j

cells[i][j] = (i==cells.length-1) ? 10 : 0;

}

}

}

public int getHeight() {

return cells.length;

}

public int getWidth() {

return cells[0].length;

}

public int getCell(int i, int j) {

return cells[i][j];

}

public void draw(Graphics g) {

g.setColor(Color.GRAY);

g.fillRect(10,0,300,600);

g.setColor(Color.BLUE);

g.fillPolygon(x,y,x.length);

for (int i = 0; i

for (int j = 0; j

drawCell(g,i,j);

}

}

}

public void drawCell(Graphics g, int i, int j) {

g.setColor(Figure.COLORS[cells[i][j]]);

g.fillRect(j*30+11,i*30+1,28,28);

}

public int acceptFigure(Figure f){

for (int i=0; i

for (int j=0; j

int xx = f.getX()+j, yy = f.getY()+i;

if (f.getCell(i,j)!=0) { // клетка не пуста

cells[yy][xx] = f.getCell(i,j);

} }

}

int lines = clearFullLines();

if (lines>0) return lines;

if (f.getY()==0) return -1;

return 0;

}

private int clearFullLines() {

int linesCount = 0;

lineLoop: for (int i=1; i<20; i++){

for (int j=0; j<10; j++) {

if (cells[i][j]==0) {

continue lineLoop;

}

}

linesCount++;

for (int j=i; j>=1; j--) {

cells[j]=cells[j-1];

}

cells[0] = new int[10];

for (int j=0; j<10; j++) {

cells[0][j]=0;

}

}

return linesCount;

}

}

Файл PlaySound.java

package Tetr;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.sound.midi.*;

import java.io.*;

/**

*

* @author irdis_13

*/

public class PlaySound implements ActionListener{

public PlaySound(String s){

play(s);

}

protected void play(String file) {

try{

File f = new File(file);

Sequencer sequencer = MidiSystem.getSequencer();

if (sequencer == null) {

System.err.println("Sequenser not supported");

}

sequencer.open();

Sequence seq = MidiSystem.getSequence(f);

sequencer.setSequence(seq);

sequencer.start();

sequencer.setLoopCount(1000);

}catch(Exception e){

System.err.println(e);

}

}

public void actionPerformed(ActionEvent e) {

throw new UnsupportedOperationException("Not supported yet.");

}

}

Файл TetrisFrame.java

package Tetr;

import Tetr.TetrisGamePanel;

import java.awt.event.ActionEvent;

import java.awt.event.KeyEvent;

/**

*

* @author irdis_13

*/

public class TetrisFrame extends javax.swing.JFrame {

/** Creates new form TetrisFrame */

public TetrisFrame() {

initComponents();

tetrisGamePanel1.grabFocus();

}

// //GEN-BEGIN:initComponents

private void initComponents() {

buttonPanel1 = buttonPanel1 = new ButtonPanel(this);

menuBar = new javax.swing.JMenuBar();

jMenu1 = new javax.swing.JMenu();

menuNewGame = new javax.swing.JMenuItem();

menuPauseGame = new javax.swing.JMenuItem();

jSeparator1 = new javax.swing.JSeparator();

menuFileExit = new javax.swing.JMenuItem();

tetrisGamePanel1 = new Tetr.TetrisGamePanel();

menuBar1 = new javax.swing.JMenuBar();

jMenu2 = new javax.swing.JMenu();

menuNewGame1 = new javax.swing.JMenuItem();

menuPauseGame1 = new javax.swing.JMenuItem();

jSeparator2 = new javax.swing.JSeparator();

menuFileExit1 = new javax.swing.JMenuItem();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setFocusable(false);

jMenu1.setText("File");

menuNewGame.setText("Item");

jMenu1.add(menuNewGame);

menuPauseGame.setText("Item");

jMenu1.add(menuPauseGame);

jMenu1.add(jSeparator1);

menuFileExit.setText("Item");

jMenu1.add(menuFileExit);

menuBar.add(jMenu1);

tetrisGamePanel1.addKeyListener(new java.awt.event.KeyAdapter() {

public void keyPressed(java.awt.event.KeyEvent evt) {

tetrisGamePanel1KeyPressed(evt);

}

});

menuBar1.setFocusable(false);

jMenu2.setText("File");

jMenu2.setFocusable(false);

menuNewGame1.setText("Start New Game");

menuNewGame1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

menuNewGame1ActionPerformed(evt);

}

});

jMenu2.add(menuNewGame1);

menuPauseGame1.setText("Stop Game");

menuPauseGame1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

menuPauseGame1ActionPerformed(evt);

}

});

jMenu2.add(menuPauseGame1);

jMenu2.add(jSeparator2);

menuFileExit1.setText("Exit");

menuFileExit1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

menuFileExit1ActionPerformed(evt);

}

});

jMenu2.add(menuFileExit1);

menuBar1.add(jMenu2);

setJMenuBar(menuBar1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(153, 153, 153)

.addComponent(buttonPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(tetrisGamePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 485, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(buttonPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(tetrisGamePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 612, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);

pack();

}// //GEN-END:initComponents

private void tetrisGamePanel1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tetrisGamePanel1KeyPressed

TetrisGamePanel p = (TetrisGamePanel)tetrisGamePanel1;

switch (evt.getKeyCode()) {

case KeyEvent.VK_LEFT:

p.figureMoveLeft();

break;

case KeyEvent.VK_RIGHT:

p.figureMoveRight();

break;

case KeyEvent.VK_UP:

p.figureRotate();

break;

case KeyEvent.VK_DOWN:

p.figureMoveDown();

break;

case KeyEvent.VK_F2:

p.startNewGame();

break;

case KeyEvent.VK_F3:

p.gamePauseResume();

break;

default: return;

}

repaint();

}//GEN-LAST:event_tetrisGamePanel1KeyPressed

private void menuNewGame1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuNewGame1ActionPerformed

TetrisGamePanel p = (TetrisGamePanel)tetrisGamePanel1;

p.startNewGame();

}//GEN-LAST:event_menuNewGame1ActionPerformed

private void menuPauseGame1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuPauseGame1ActionPerformed

TetrisGamePanel p = (TetrisGamePanel)tetrisGamePanel1;

p.stopGame();

}//GEN-LAST:event_menuPauseGame1ActionPerformed

private void menuFileExit1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuFileExit1ActionPerformed

System.exit(0);

}//GEN-LAST:event_menuFileExit1ActionPerformed

/**

* @param args the command line arguments

*/

public void continueButtonPressed(ActionEvent evt) {

TetrisGamePanel p = (TetrisGamePanel)tetrisGamePanel1;

p.resumeGame();

}

public void pauseButtonPressed(ActionEvent evt) {

TetrisGamePanel p = (TetrisGamePanel)tetrisGamePanel1;

p.pauseGame();

}

// Variables declaration - do not modify//GEN-BEGIN:variables

private Tetr.ButtonPanel buttonPanel1;

private javax.swing.JMenu jMenu1;

private javax.swing.JMenu jMenu2;

private javax.swing.JSeparator jSeparator1;

private javax.swing.JSeparator jSeparator2;

private javax.swing.JMenuBar menuBar;

private javax.swing.JMenuBar menuBar1;

private javax.swing.JMenuItem menuFileExit;

private javax.swing.JMenuItem menuFileExit1;

private javax.swing.JMenuItem menuNewGame;

private javax.swing.JMenuItem menuNewGame1;

private javax.swing.JMenuItem menuPauseGame;

private javax.swing.JMenuItem menuPauseGame1;

private Tetr.TetrisGamePanel tetrisGamePanel1;

}

Файл TetrisGamePanel.java

package Tetr;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

/**

*

* @author irdis_13

*/

public class TetrisGamePanel extends javax.swing.JPanel implements GamePanel,ActionListener {

private Glass stakan;

private Figure fig = null;

private int score = 0;

private int gameState;

private int[] DELAY = {500, 450, 400, 350, 300, 250, 200, 150, 100, 50};

private int level = 1;

Timer t = new javax.swing.Timer(DELAY[level], this);

public TetrisGamePanel() {

stakan = new Glass();

startNewGame();

t.start();

}

@Override

public void paintComponent(Graphics g) {

super.paintComponent(g);

stakan.draw(g);

fig.draw(g);

g.setFont(new Font("Times New Roman", Font.BOLD, 24));

g.setColor(Color.BLACK);

g.drawString("Счет: " + score, 350, 250);

g.drawString("Уровень: " + level, 350, 300);

}

public int getScore() {

return score;

}

public void startNewGame() {

score = 0;

level = 1;

fig = new Figure();

stakan = new Glass();

gameState = PLAY;

}

public void pauseGame() {

if (gameState == PLAY) {

gameState = PAUSE;

}

}

public void resumeGame() {

if (gameState == PAUSE) {

gameState = PLAY;

}

}

public void stopGame() {

gameState = STOP;

}

public int getState() {

return gameState;

}

public void figureMoveRight(){

if (fig.canRight(stakan)& gameState==PLAY)

fig.moveRight();

}

public void figureMoveLeft(){

if (fig.canLeft(stakan)& gameState==PLAY)

fig.moveLeft();

}

public void figureMoveDown(){

t.setDelay(DELAY[level]/20);

}

public void figureRotate(){

if (fig.canRotate(stakan)& gameState==PLAY)

fig.rotate();

}

public void gamePauseResume(){

if (gameState==PLAY) {

gameState = PAUSE;

}

else

if (gameState==PAUSE) {

gameState = PLAY;

}

}

public void actionPerformed(ActionEvent e) {

if (gameState != PLAY) {

return;

}

int bonus;

if (fig.canDown(stakan)) {

fig.moveDown();

} else {

if ((bonus = stakan.acceptFigure(fig)) < 0) {

stopGame();

}

if (bonus > 0) {

switch (bonus) {

case 4:

score += 20;

case 3:

score += 15;

case 2:

score += 10;

case 1:

score += 5;

}

int newLevel = score / 100 + 1;

if (newLevel > level && level < 9) {

level++;

}

}

if (gameState == PLAY) {

fig = new Figure();

t.setDelay(DELAY[level]);

}

}

repaint();

}

// //GEN-BEGIN:initComponents

private void initComponents() {

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);

this.setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 400, Short.MAX_VALUE)

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 300, Short.MAX_VALUE)

);

}// //GEN-END:initComponents

}

Додаток Д Результат роботи програми

Результат роботи програми зображено на рисунку 5

Рисунок 5 – Результат роботи програми

Характеристики

Тип файла
Документ
Размер
19,45 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7029
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее